13. Quelques recettes pour faire durer le plaisir
Extraire seulement les caractères de 5 à 7
Extraire les caractères à partir de 5
Savoir si une condition est vraie ou fausse?
Est-ce que le contenu des valeurs correspond à “2019-01-01”
Connaître la longueur des valeurs d’une colonne
Compter le nombre de mots dans des cellules (séparés par des espaces)
- value.split(" ").length() ou value.split(//).length()
Calcul d’un pourcentage arrondi (ex d’un résultat sur 10)
Transformer un format date en format texte plus lisible
- value.toString(“dd MMMM yyyy”)
La création et manipulation de listes (array) - Diviser le contenu de cellules
Diviser le contenu de cellules en fonction d’un séparateur pour ne conserver que le premier élément
Diviser le contenu d’une cellule pour le réordonner
value.split(“,”).reverse().join(“,”)
value.split(“,”).sort().join(“,”)
Diviser après les 3 premiers caractères et conserver le premier élément
- value.splitByLengths(3)[0]
Diviser selon le type de caractères et retenir le deuxième élément
- value.splitByCharType()[1]
Diviser le contenu d’une cellule sur un terme x et conserver le contenu précédent
Inverser le contenu d’une cellule
Diviser le contenu d’une cellule et inverser l’ordre de présentation en ajoutant une virgule entre les deux
- value.split(’ ‘)[1] + “,” + " " + value.split(’ ’)[0]
OU
- value.match(/(.),(.)/).reverse().join(" ")
Ajouter un zéro pour avoir un nombre de caractères précis
Ajouter un zéro devant le contenu si donne une chaine de 0 à 2 caractères
- “0”[0,2-length(value)] + value
Appliquer des conditions
Fonction if - même chose que dans excel
- if(test, si test est vrai, si test est vrai)
Si la cellule contient x, écrire x, sinon y
if(value.contains(“x”), “x”, “y”)
if(value.contains(“1”), value, null)
Comparer deux colonnes
Identifier si le contenu des cellules d’une colonne est pareil à une autre
- value == cells[‘autre-colonne’].value
Est-ce que le premier caractère de la colonne x est le même que la colonne y
- cells[“colonne1”].value[0] == cells[“colonne2”].value[0]
Comparer le contenu de deux colonnes et modifier les valeurs selon le résultat de la condition
- if(cells[“colonne1”].value == cells[“colonne2”].value, “Pareil”, “Pas pareil”)
Vérifier le format d’une colonne
Faire des calculs simples (valeurs numériques)
Somme d’une colonne plus une autre
- value + cells[‘Jour du mois’].value
Arrondir le contenu
Reprendre et concaténer le contenu d’une autre colonne
Créer une nouvelle colonne en fusionnant le contenu de deux autres et ajouter du texte
- cells[‘nom’].value + cells[‘nom’].value + “Bonjour!”
Créer une nouvelle colonne avec les trois premiers caractères seulement
- cells[‘Symptome’].value[0,3]
Transformer le contenu d’une colonne en concaténant le contenu d’une autre
- value + ’ ’ + cells[‘street-type’].value
Remplacer des caractères
Remplacer tout le contenu d’une colonne (ici, vider la colonne)
Remplacer une lettre par une autre
- value.replaceChars(“o”, “a”)
Faire plusieurs remplacements d’un coup
- value.replace(“1”, “un”).replace(“2”, “deux”).replace(“3”, “trois”)
Identifier des cellules qui commencent par… (résultat booléen)
- value.startsWith(“Berri”)
Supprimer un caractère de début ou fin de valeur:
Supprime “S” du début de la cellule
- value.replace(/^S/,"") [regex ^ indique le début d’une cellule]
Supprime “.” à la fin de la cellule
- value.replace(/.$/,"") [regex $ indique la fin d’une cellule]
Modifier/supprimer la ponctuation
Travailler avec un format date
Extraire seulement une partie d’une date
value.toDate().datePart(“year”)
diff(now(),value,‘weeks’)
LS0tDQp0aXRsZTogIk9wZW5SZWZpbmUiDQphdXRob3I6ICJDYXJvbGluZSBQYXRlbmF1ZGU8L2JyPkJpYmxpb3Row6hxdWUgZGVzIGxldHRyZXMgZXQgc2NpZW5jZXMgaHVtYWluZXMsIFVuaXZlcnNpdMOpIGRlIE1vbnRyw6lhbDwvYnI+Y2Fyb2xpbmUucGF0ZW5hdWRlQHVtb250cmVhbC5jYSINCmRhdGU6ICJgciBTeXMuRGF0ZSgpYCINCm91dHB1dDoNCiAgcm1kZm9ybWF0czo6cm9ib2Jvb2s6DQogICAgc2VsZl9jb250YWluZWQ6IHRydWUNCiAgICBoaWdobGlnaHQ6IGthdGUNCiAgICB0aHVtYm5haWxzOiBmYWxzZQ0KICAgIGxpZ2h0Ym94OiB0cnVlDQogICAgZ2FsbGVyeTogdHJ1ZQ0KICAgIHRvY19kZXB0aDogMg0KICAgIGNvZGVfZG93bmxvYWQ6IHRydWUNCiAgICBtYXRoamF4OiBudWxsDQogICAgZGZfcHJpbnQ6IHBhZ2VkDQotLS0NCg0KDQpgYGB7ciBzZXR1cCwgaW5jbHVkZT1GQUxTRX0NCmxpYnJhcnkoa25pdHIpDQpsaWJyYXJ5KHJtZGZvcm1hdHMpDQoNCiMjIEdsb2JhbCBvcHRpb25zDQpvcHRpb25zKG1heC5wcmludD0iNzUiKQ0Kb3B0c19jaHVuayRzZXQoZWNobz1GQUxTRSwNCgkgICAgICAgICAgICAgY2FjaGU9VFJVRSwNCiAgICAgICAgICAgICAgIHByb21wdD1GQUxTRSwNCiAgICAgICAgICAgICAgIHRpZHk9VFJVRSwNCiAgICAgICAgICAgICAgIGNvbW1lbnQ9TkEsDQogICAgICAgICAgICAgICBtZXNzYWdlPUZBTFNFLA0KICAgICAgICAgICAgICAgd2FybmluZz1GQUxTRSkNCm9wdHNfa25pdCRzZXQod2lkdGg9NzUpDQpgYGANCg0KDQoNCiFbXShpbWFnZXMvT1ItbG9nby5qcGcpIA0KDQo8L2JyPg0KDQoqKioNCg0KDQojIE9iamVjdGlmcw0KDQo8ZGl2IGNsYXNzID0gInJpZ2h0Ij4NCjxpbWcgc3JjPSJpbWFnZXMvT1IxNi5qcGciIHdpZHRoPSIyNTBweCIgLz4NCjwvZGl2Pg0KDQotIENvbXByZW5kcmUgbGUgZm9uY3Rpb25uZW1lbnQgZHUgbG9naWNpZWwuDQotIEltcG9ydGVyIGV0IGV4cGxvcmVyIHVuIGpldSBkZSBkb25uw6llcy4gDQotIE1hbmlwdWxlciBldCB0cmFuc2Zvcm1lciBkZXMgZG9ubsOpZXMuDQotIFMnaW5pdGllciDDoCBsJ3VzYWdlIGR1IGxhbmdhZ2UgR1JFTCBldCBhdXggZXhwcmVzc2lvbnMgcsOpZ3VsacOocmVzLg0KPC9icj4NCjwvYnI+DQo8L2JyPg0KPC9icj4NCjwvYnI+DQoNCioqKg0KDQoNCiMgMS4gUHLDqWxpbWluYWlyZXMNCiMjIERlcyBkb25uw6llcyBiaWVuIG9yZG9ubsOpZXMgY29tbWVuY2VudCBwYXIgc29pLW3Dqm1lIQ0KDQoNCi0gTGUgbmV0dG95YWdlIGRlIGZpY2hpZXJzIGRlIGRvbm7DqWVzIGVzdCB1bmUgdMOiY2hlIHNvdXZlbnQgbG9uZ3VlIGV0IGVubnV5ZXVzZSBtYWlzIGluY29udG91cm5hYmxlIGF2YW50IHRvdXRlIGFuYWx5c2Ugb3UgZGlmZnVzaW9uIGRlIGRvbm7DqWVzLg0KDQotIEwnYW1wbGV1ciBkZSBjZXR0ZSB0w6JjaGUgZMOpcGVuZHJhIGRlIGwnw6l0YXQgZGVzIGRvbm7DqWVzIGV0IGR1IHR5cGUgZGUgbG9naWNpZWwgcXVpIHNlcmEgZW5zdWl0ZSB1dGlsaXPDqSDDoCBkZXMgZmlucyBkJ2FuYWx5c2Ugb3UgZGUgdmlzdWFsaXNhdGlvbiAoUiwgU1BTUywgU3RhdGEsIFRhYmxlYXUsIEFyY0dJUy4uLikNCg0KPC9icj4NCg0KIyMjIyBQcm9ibMOobWVzIGNvdXJhbnRzIHJlbGF0aWZzIMOgIGxhIGZvcm1lIGV0L291IGF1IGNvbnRlbnUgZCd1biBqZXUgZGUgZG9ubsOpZXM6DQoNCi0gUHJvYmzDqG1lcyBkJ2VudMOqdGVzIGV0IGRlIG5vbXMgZGUgdmFyaWFibGVzLg0KLSBDZWxsdWxlcyBmdXNpb25uw6llcywgcXVpIGNvbnRpZW5uZW50IGRpZmbDqXJlbnRlcyBpbmZvcm1hdGlvbnMuDQotIFZhcmlhYmxlcyBxdWkgbmUgc29udCBwYXMgY2xhaXJlbWVudCBkw6lmaW5pZXMgw6AgbGEgdmVydGljYWxlLg0KLSBDb250ZW51IHRleHR1ZWwgbm9uIHN0cnVjdHVyw6kuDQotIFByb2Jsw6htZXMgZGUgZm9ybWF0cywgZGUgInBldGl0cyBjYXJhY3TDqHJlcyIgLT4gc8OpcGFyYXRldXJzL2TDqWxpbWl0ZXVycyBkZSBjb250ZW51IGV0IGRlIGNvbG9ubmVzLCBndWlsbGVtZXRzLCBlbmNvZGFnZSAoJycgIHx8IHwgIiIgLCAuIDsgKQ0KLSBQcsOpc2VuY2UgZGUgY2VsbHVsZXMgdmlkZXMsIGVzcGFjZXMuLi4NCg0KW0EgY2FzZSBzdHVkeSBpbiBtZXNzeSBkYXRhIGFuYWx5c2lzOiB0aGUgQXVzdHJhbGlhbiBzYW1lLXNleCBtYXJyaWFnZSBzdXJ2ZXldKGh0dHBzOi8vYmxvZy5yZXZvbHV0aW9uYW5hbHl0aWNzLmNvbS8yMDE3LzEyL3NleC1tYXJyaWFnZS1zdXJ2ZXkuaHRtbCkNCg0KPGNlbnRlcj4NCg0KIVtdKGltYWdlcy9PUjkuanBnKXt3aWR0aD02MCV9ICANCg0KPC9jZW50ZXI+DQoNCjwvYnI+DQoNCioqKg0KDQoNCkF2YW50IGQndXRpbGlzZXIgc2VzIGRvbm7DqWVzIGRhbnMgbGUgbG9naWNpZWwgZGUgc29uIGNob2l4LCBsZSBuZXR0b3lhZ2UgZGUgc2VzIGRvbm7DqWVzIHBldXQgZG9uYyBpbmNsdXJlIGRlIG5vbWJyZXVzZXMgdMOiY2hlcyBjb21tZToNCg0KPGRpdiBjbGFzcyA9ICJyaWdodCI+DQo8aW1nIHNyYz0iaW1hZ2VzL2JvdHRsZS5wbmciIHdpZHRoPSIxNzVweCIgLz4NCjwvZGl2Pg0KLSBNb2RpZmllciBsJ2VuY29kYWdlLg0KLSBTdXBwcmltZXIgbGVzIGRvdWJsb25zLg0KLSBEaXZpc2VyIGxlcyBjZWxsdWxlcyBjb21wb3PDqWVzIGRlIHZhbGV1cnMgbXVsdGlwbGVzLiAgIA0KLSBSZWNvZGVyIGxlcyB2YWxldXJzIG1hbnF1YW50ZXMuDQotIFJlcMOpcmVyIGxlcyBlcnJldXJzIGRlIHNhaXNpZSwgbGVzIHZhbGV1cnMgYWJlcnJhbnRlcy4uLg0KLSBGdXNpb25uZXIgZGVzIGZpY2hpZXJzLg0KLSBGdXNpb25uZXIgZGVzIGNvbG9ubmVzLg0KLSBBZ3LDqWdlciBkZXMgdmFsZXVycyBkZSB2YXJpYWJsZXMuDQotIENyw6llciBkZXMgdmFyaWFibGVzLg0KLSBDaGFuZ2VyIGxlIGZvcm1hdCBkZXMgdmFyaWFibGVzLg0KLSBDaGFuZ2VyIGxlIGZvcm1hdCBkdSBmaWNoaWVyLg0KLSBUcmFuc2Zvcm1lciBsZXMgY29sb25uZXMgZW4gcmFuZ8OpZXMgKGZvcm1hdCAid2lkZSIgZW4gImxvbmciKS4NCg0KPC9icj4NCg0KKioqDQoNCg0KIyAyLiBQb3VycXVvaSBPcGVuUmVmaW5lPw0KDQotIFBsdXNpZXVycyBsYW5nYWdlcyBkZSBwcm9ncmFtbWF0aW9uIGV0IG91dGlscyBkJ2FuYWx5c2Ugb3UgZGUgZ2VzdGlvbiBkZSBkb25uw6llcyBwZXV2ZW50IMOqdHJlIHV0aWxpc8OpcywgbWFpcyBPcGVuUmVmaW5lIGEgw6l0w6kgY3LDqcOpIHNww6ljaWZpcXVlbWVudCBwb3VyIGZhaXJlIGxlIG3DqW5hZ2UhDQoNCi0gUGx1cyBmYWNpbGUgcXVlIFIgZXQgcGx1cyBlZmZpY2FjZSBxdSdFeGNlbC4NCg0KLSBQZXJtZXQgZGUgZmFjaWxlbWVudCBpZGVudGlmaWVyIGV0IGRlIGNvcnJpZ2VyIGVuIGxvdCBkZXMgZG9ubsOpZXMgaW5jb21wbMOodGVzLCBtYW5xdWFudGVzLCBlcnJvbsOpZXMsIGluY29ow6lyZW50ZXMsIG5vbiBwZXJ0aW5lbnRlcywgbWFsIGZvcm1hdMOpZXMsIHF1J2VsbGVzIHNvaWVudCBudW3DqXJpcXVlcyBvdSB0ZXh0dWVsbGVzID0+IHNhdXZlIHRlbXBzIGV0IMOpbmVyZ2llLg0KDQoNCjxjZW50ZXI+ICAgDQoNCjxpbWcgc3JjPSJpbWFnZXMvMTkxOC1BZC04NjAtODYweDU3My5qcGciIHdpZHRoPSI2MCUiLz4NCg0KPC9jZW50ZXI+ICAgDQoNCg0KPC9icj4NCg0KIyMjIEZvbmN0aW9ucyBzcMOpY2lhbGlzw6llcyBwb3VyOg0KDQotICpFeHBsb3Jlciogc2VzIGRvbm7DqWVzIHNvdXMgdG91cyBzZXMgYW5nbGVzIChncsOiY2Ugw6AgZGVzIGZpbHRyZXMsIHRyaXMsIGZhY2V0dGVzLCByZWdyb3VwZW1lbnRzKS4gICANCi0gKk5ldHRveWVyKiA6IHJlcMOpcmVyIGRlcyBlcnJldXJzLCBtb2RpZmllciBsZSBjb250ZW51IGRlcyBjZWxsdWxlcy4uLg0KLSAqVHJhbmZvcm1lciogOiBjaGFuZ2VyIGZvcm1hdHMgZGUgc2VzIHZhcmlhYmxlcywgY3LDqWVyIGRlIG5vdXZlbGxlcyB2YXJpYWJsZXMgc3VyIGxhIGJhc2UgZGVzIGNvbG9ubmVzIHByw6lzZW50ZXMuLi4NCi0gKkVucmljaGlyKiA6IGZ1c2lvbm5lciBkZXMgZmljaGllcnMsIGltcG9ydGVyIGRlcyBkb25uw6llcyBlbiBsaWduZSAoQVBJLCBVUkxzKSwgcsOpY29uY2lsaWF0aW9uIChXaWtpZGF0YSBldCBbYXV0cmVzIHNvdXJjZXMgZXh0ZXJuZXNdKGh0dHBzOi8vZ2l0aHViLmNvbS9PcGVuUmVmaW5lL09wZW5SZWZpbmUvd2lraS9SZWNvbmNpbGFibGUtRGF0YS1Tb3VyY2VzKSkuLi4NCi0gKkF1dG9tYXRpc2VyKiAocsOpdXRpbGlzZXIgc29uIGhpc3RvcmlxdWUgZGUgbWFuaXB1bGF0aW9ucykNCg0KPC9icj4NCg0KPGRpdiBjbGFzcyA9ICJub3RlIj4NCg0KKirDgCBub3RlcioqIA0KDQpPcGVuUmVmaW5lIG4nZXN0IHBhcyB1biBvdXRpbCBkJ2FuYWx5c2Ugb3UgZGUgdmlzdWFsaXNhdGlvbiBldCBuZSBwZXJtZXQgcGFzIGRlIGNyw6llciB1biBqZXUgZGUgZG9ubsOpZXMgw6AgcGFydGlyIGRlIHrDqXJvLiBDZSBuJ2VzdCBwYXMgdW4gb3V0aWwgZGUgcmVtcGxhY2VtZW50IG1haXMgY29tcGzDqW1lbnRhaXJlLg0KDQo8L2Rpdj4NCg0KDQo8L2JyPg0KDQoqKioNCg0KDQojIyAyLjEuIEV4ZW1wbGVzIGQndXRpbGlzYXRpb24NCg0KSGFybW9uaXNlciwgc3RhbmRhcmRpc2VyLCB1bmlmb3JtaXNlci4uLg0KDQo8Y2VudGVyPiAgDQoNCiFbXShpbWFnZXMvT1I4LmpwZykgICANCg0KPC9jZW50ZXI+ICANCg0KPC9icj4NCg0KKioqDQoNCg0KIyMgMi4yLiBQb3VyIGF2b2lyIGRlIGJlbGxlcyBkb25uw6llcyAqdGlkeSoNCg0KUGVybWV0IGQnYXBwbGlxdWVyIGxlcyBwcmluY2lwZXMgZHUgW1RpZHlkYXRhXShodHRwczovL3I0ZHMuaGFkLmNvLm56L3RpZHktZGF0YS5odG1sKSANCg0KPiDigJxUaWR5IGRhdGFzZXRzIGFyZSBhbGwgYWxpa2UsIGJ1dCBldmVyeSBtZXNzeSBkYXRhc2V0IGlzIG1lc3N5IGluIGl0cyBvd24gd2F5LuKAnSDigJPigJMgSGFkbGV5IFdpY2toYW0NCg0KPC9icj4NCg0KKipUcm9pcyBwcmluY2lwZXMgZGUgYmFzZToqKg0KDQoxLiBDaGFxdWUgY29sb25uZSBlc3QgdW5lICoqdmFyaWFibGUqKi4NCjIuIENoYXF1ZSBsaWduZSBlc3QgdW5lICoqb2JzZXJ2YXRpb24qKi4NCjMuIENoYXF1ZSBjZWxsdWxlIMOgICoqdW5lIHNldWxlIHZhbGV1cioqLg0KDQo8Y2VudGVyPiAgDQoNCiFbXShpbWFnZXMvT1IxMC5qcGcpIA0KDQo8L2NlbnRlcj4gIA0KDQo8L2JyPg0KDQoqKioNCg0KDQojIyAyLjMuICBQcmluY2lwYWxlcyBjYXJhY3TDqXJpc3RpcXVlcw0KDQotIExvZ2ljaWVsIGdyYXR1aXQgZXQgb3V2ZXJ0IHV0aWxpc8OpIHBhciB1bmUgbGFyZ2UgY29tbXVuYXV0w6kuDQoNCi0gQ3LDqcOpIGVuIDIwMTAgKCpGcmVlYmFzZSBHcmlkd29ya3MqKSwgcmFjaGV0w6kgcGFyIEdvb2dsZSBlbiAyMDEwICgqR29vZ2xlIFJlZmluZSopLCBwdWlzIG91dmVydHVyZSBkdSBjb2RlIGVuIDIwMTIgZXQgcmVwcmlzIHBhciBjb21tdW5hdXTDqSBxdWkgbGUgZMOpcGxhY2Ugc3VyIEdpdGh1YiBldCBkZXZpZW50ICpPcGVuUmVmaW5lKi4NCg0KLSBNdWx0aXBsYXRlZm9ybWVzOiBXaW5kb3dzLCBNYWMsIExpbnV4Lg0KDQotIEludGVyZmFjZSBzZW1ibGFibGUgw6AgdW4gdGFibGV1ciBjb21tZSBFeGNlbCwgbWFpcyBkb250IGxlIGZvbmN0aW9ubmVtZW50IHMnYXBwYXJlbnRlIHBsdXMgw6AgdW5lIGJhc2UgZGUgZG9ubsOpZXMgKHBhciBleGVtcGxlIGxlcyB0cmFpdGVtZW50cyBzb250IHPDqXBhcsOpcyBkZXMgZG9ubsOpZXMsIGllIGxlcyBmb3JtdWxlcyBuZSBzb250IHBhcyBlbnJlZ2lzdHLDqWVzIGRhbnMgbGVzIGNlbGx1bGVzIG1haXMgZGFucyB1biBzY3JpcHQpLg0KDQotIEFzc29jaWUgbGEgZmFjaWxpdMOpIGQndXNhZ2UgZCd1biBsb2dpY2llbCBjb21tZSBFeGNlbCDDoCBsYSBwdWlzc2FuY2UgZCdvdXRpbHMgZGUgcHJvZ3JhbW1hdGlvbiBldCBkJ2FsZ29yaXRobWVzLg0KDQotIFVzYWdlIGRlIGwnKippbnRlcmZhY2UgZ3JhcGhpcXVlKiogZXQvb3UgKipzY3JpcHRzIEdSRUwqKiAoKkdvb2dsZSBSZWZpbmUgRXhwcmVzc2lvbiBMYW5ndWFnZSopOiBwcm9wb3NlIHVuIGVuc2VtYmxlIGRlIGZvbmN0aW9ucyBhdXRvbWF0aXPDqWVzIGRvbmMgbmUgbsOpY2Vzc2l0ZSDDoCBsYSBiYXNlIGF1Y3VuZSBjb21ww6l0ZW5jZSBlbiBwcm9ncmFtbWF0aW9uIG91IGFuYWx5c2UsIG1haXMgbCd1c2FnZSBkdSBsYW5nYWdlIHBlcm1ldCBkJ2FsbGVyIGJlYXVjb3VwIHBsdXMgbG9pbi4NCg0KLSBQYXJ0aWN1bGnDqHJlbWVudCBwdWlzc2FudCBwb3VyIGxlIG5ldHRveWFnZSBkZSB0YWJsZSBkZSBkb25uw6llcyBhdmVjIGR1IGNvbnRlbnUgdGV4dHVlbC4NCg0KLSAqKlJlcHJvZHVjdGliaWxpdMOpKiohIFBlcm1ldCBkZSBnYXJkZXIgdW4gaGlzdG9yaXF1ZSBkZSB0b3V0ZXMgbGVzIG1hbmlwdWxhdGlvbnMgZWZmZWN0dcOpZXMgc3VyIHNlcyBkb25uw6llcyBhZmluIGRlIGxlcyBwYXJ0YWdlciwgZGUgbGVzIHLDqXV0aWxpc2VyIHN1ciBkJ2F1dHJlcyBkb25uw6llcy4uLg0KDQo8L2JyPg0KDQoNCioqKg0KDQoNCiMgMy4gSW5zdGFsbGF0aW9uIGV0IGZvbmN0aW9ubmVtZW50IGfDqW7DqXJhbA0KDQotIExlIGZvbmN0aW9ubmVtZW50IGQnT3BlblJlZmluZSBwZXV0IMOqdHJlIHVuIHBldSBkw6lyb3V0YW50IGF1IGTDqXBhcnQgY2FyIGlsIG4neSBhIHBhcyBkJ2luc3RhbGxhdGlvbiBlbiBib25uZSBldCBkdWUgZm9ybWUgY29tbWUgcG91ciB1biBsb2dpY2llbCByw6lndWxpZXIuDQoNCi0gW1TDqWzDqWNoYXJnZXIgZXQgZMOpemlwcGVyXShodHRwczovL29wZW5yZWZpbmUub3JnL2Rvd25sb2FkLmh0bWwpIGxlIGxvZ2ljaWVsIGRhbnMgdW4gZG9zc2llciBkZSBzb24gY2hvaXguDQoNCi0gQ3LDqcOpIGVuIGxhbmdhZ2UgSmF2YSBbZG9uYyBuw6ljZXNzaXRlIGwnaW5zdGFsbGF0aW9uIGRlIEphdmEgKDY0IGJpdHMgZGUgcHLDqWbDqXJlbmNlKV0oaHR0cHM6Ly93d3cuamF2YS5jb20vZW4vZG93bmxvYWQvKS4NCg0KLSBOYXZpZ2F0ZXVycyDDoCBwcml2aWzDqWdpZXI6IENocm9tZSwgT3BlcmEsIEVkZ2UuIEZpcmVmb3ggcGV1dCBwb3NlciBwcm9ibMOobWUgKG5lIGZvbmN0aW9ubmUgcGFzIGRhbnMgSUUpLiAgDQoNCi0gUG91ciBkw6ltYXJyZXIgbGUgbG9naWNpZWwsIGNsaXF1ZXIgc3VyIGxlIGZpY2hpZXIgYGAgYG9wZW5yZWZpbmUuZXhlYCBgYCBvdSBgcmVmaW5lLmJhdGAuIElsIGVzdCB1dGlsZSBkZSBmYWlyZSB1biBjbGljLWRyb2l0IHN1ciBsZSBmaWNoaWVyIC5leGUgcG91ciBsJ8OpcGluZ2xlciBkYW5zIHNhIGJhcnJlIGRlIHTDomNoZXMgKHN1ciBNYWMsIGTDqXBsYWNlciBsJ2ljw7RuZSBPcGVuUmVmaW5lIGRhbnMgbGUgZG9zc2llciBkJ2FwcGxpY2F0aW9ucyBldCBkb3VibGUgY2xpcXVlciBzdXIgY2VsbGUtY2kpLg0KDQotIFVuZSBmZW7DqnRyZSBkZSBjb21tYW5kZSBub2lyZSBzJ291dnJpcmEgZXQgbGFuY2VyYSBsJ291dmVydHVyZSBkJ3VuIG9uZ2xldCBkYW5zIGxlIG5hdmlnYXRldXIgd2ViLiAgDQoNCi0gTGEgZmVuw6p0cmUgZGUgY29tbWFuZGVzIHBldXQgZW5zdWl0ZSDDqnRyZSBpZ25vcsOpZSBtYWlzIE5FIFBBUyBMQSBGRVJNRVIhIEVsbGUgbmUgc2VydmlyYSBxdSfDoCBmZXJtZXIgbGEgc2Vzc2lvbiBkZSB0cmF2YWlsLiAgDQoNCi0gU2kgbGUgbmF2aWdhdGV1ciBuZSBzJ291dnJlIHBhcyBhdXRvbWF0aXF1ZW1lbnQsIHNhaXNpciBsJ2FkcmVzc2UgaHR0cDovLzEyNy4wLjAuMTozMzMzLyBvdSBodHRwOi8vbG9jYWxob3N0OjMzMzMgZGFucyB1biBvbmdsZXQuIA0KDQo8Y2VudGVyPiAgDQoNCiFbXShpbWFnZXMvT1IxNy5qcGcpe3dpZHRoPTgwJX0NCg0KPC9jZW50ZXI+ICANCg0KPC9icj4NCg0KKioqDQoNCg0KIyMgMy4xLiBUcmF2YWlsIGxvY2FsDQoNCi0gUmVwb3NlIGRvbmMgc3VyIGRldXggY29tcG9zYW50ZXM6IHVuICoqc2VydmV1ciB3ZWIgbG9jYWwqKiBldCB1biAqKm9uZ2xldCBkZSBuYXZpZ2F0ZXVyIHdlYioqIHBvaW50YW50IHZlcnMgbCdhZHJlc3NlIGR1IHNlcnZldXIgc3VyIHNvbiBwb3N0ZS4NCg0KLSBMZSB0cmF2YWlsIHNlIGZhaXQgZGFucyB1biBvbmdsZXQgZGUgbmF2aWdhdGV1ciBxdWkgZXN0IHVuZSBzaW1wbGUgaW50ZXJmYWNlIGdyYXBoaXF1ZSBwb3VyIGludGVyYWdpciBhdmVjIGNlIHNlcnZldXIgbG9jYWwsIG1haXMgKipsZXMgZG9ubsOpZXMgbmUgc29udCBwYXMgc3VyIGxlICJudWFnZSIqKi4NCg0KLSBUcmF2YWlsIGxvY2FsIGRvbmMgcGFzIGQnZW52aXJvbm5lbWVudCBjb2xsYWJvcmF0aWYuIA0KDQotIExlcyBmaWNoaWVycyBwcm9ncmFtbWVzIHNlIHRyb3V2ZXJvbnQgZGFucyBsZSBkb3NzaWVyIGQnaW5zdGFsbGF0aW9uIGV0IGxlcyBmaWNoaWVycyBkZSBwcm9qZXRzIGRhbnMgbGUgKndvcmtzcGFjZSBkaXJlY3RvcnkqLg0KDQotIE9wZW5SZWZpbmUgbmUgbW9kaWZpZSBwYXMgbGUgZmljaGllciBvcmlnaW5hbCwgaWwgdHJhdmFpbGxlIMOgIHBhcnRpciBkJ3VuZSAqKmNvcGllIGVuIG3DqW1vaXJlIHN0b2Nrw6llIGVuIGFyY2hpdmVzKiogZGFucyBsZSByw6lwZXJ0b2lyZSBkZSB0cmF2YWlsLg0KDQotIExlIHByb2pldCBlc3QgZW5yZWdpc3Ryw6kgZW4gZm9ybWF0IE9wZW5SZWZpbmUgYXV0b21hdGlxdWVtZW50IGRhbnMgbGUgZG9zc2llciBkZSB0cmF2YWlsIMOgIHRvdXRlcyBsZXMgNSBtaW51dGVzIChbcGV1dCDDqnRyZSBtb2RpZmnDqV0oaHR0cHM6Ly9kb2NzLm9wZW5yZWZpbmUub3JnL21hbnVhbC9ydW5uaW5nI2p2bS1wcmVmZXJlbmNlcykpLg0KDQotIExlIGZpY2hpZXIgZGUgZG9ubsOpZXMgdW5lIGZvaXMgbmV0dG95w6kgcG91cnJhIMOqdHJlIGV4cG9ydMOpIGVuIGRpZmbDqXJlbnRzIGZvcm1hdHMgZXQgbCdoaXN0b3JpcXVlL3N5bnRheGUgcG91cnJhIMOqdHJlIGV4dHJhaXQgZW4gZm9ybWF0IEpTT04gZXQgZW5yZWdpc3Ryw6kgZGFucyB1biBmaWNoaWVyIC50eHQuDQoNCi0gUG91ciBmZXJtZXIgbGEgc2Vzc2lvbiBkZSB0cmF2YWlsIGNvcnJlY3RlbWVudCwgZmFpcmUgYEN0cmwgKyBjYCBkYW5zIGZlbsOqdHJlIGRlIGNvbW1hbmRlIChwZXV0IMOqdHJlIG7DqWNlc3NhaXJlIGRlIGxlIGZhaXJlIHBsdXMgZCd1bmUgZm9pcykgPSBlbnJlZ2lzdHJlIGxlIHByb2pldCBldCBmZXJtZSBsZSBzZXJ2ZXVyLg0KDQo8L2JyPg0KDQo8ZGl2IGNsYXNzID0gIm5vdGUiPg0KKirDgCBub3RlcioqICANCi0gUGVybWV0IGRlIHRyYXZhaWxsZXIgc3VyIGRlIGdyb3MgZmljaGllcnMgbWFpcyBsYSB0YWlsbGUgcG9zc2libGUgZXN0IHRvdXQgZGUgbcOqbWUgbGltaXTDqWUsIGxhIHBlcmZvcm1hbmNlIHBldXQgZGV2ZW5pciBwcm9ibMOpbWF0aXF1ZSDDoCBwbHVzaWV1cnMgY2VudGFpbmVzIGRlIG1pbGxpZXJzIGRlIGxpZ25lcyAodG91dCBkw6lwZW5kYW50IGR1IG5vbWJyZSBkZSBjb2xvbm5lcykgZG9uYyBwYXMgdnJhaW1lbnQgZMOpdmVsb3Bww6kgcG91ciBmYWlyZSBkdSBiaWcgZGF0YS4NCi0gVHJhdmFpbGxlIGF2ZWMgMUdvIGRlIG3DqW1vaXJlIHBhciBkw6lmYXV0LiDDgCBwbHVzIGRlIDEwMCAwMDAgbGlnbmVzLCBpbCBwZXV0IMOqdHJlIHByw6lmw6lyYWJsZSBkJ1thdWdtZW50ZXIgbGEgbcOpbW9pcmVdKGh0dHBzOi8vZG9jcy5vcGVucmVmaW5lLm9yZy9tYW51YWwvaW5zdGFsbGluZyNpbmNyZWFzaW5nLW1lbW9yeS1hbGxvY2F0aW9uKSBkZSB0cmF2YWlsOiAgDQogIC0gT3V2cmlyIGxlIGZpY2hpZXIgcmVmaW5lLmluaSBkYW5zIG5vdGVwYWQgZXQgbW9kaWZpZXIgbGEgbGlnbmUgUkVGSU5FX01FTU9SWSA9IHBhcmFtZXRyZS4gIA0KICAtIFBhciBsYSBzdWl0ZSBsYW5jZXIgT1IgYXZlYyBsZSBmaWNoaWVyICpyZWZpbmUuYmF0KiBldCBub24gKm9wZW5yZWZpbmUuZXhlICouICAgDQoNCjwvZGl2Pg0KPC9icj4NCg0KKioqDQoNCg0KIyMgMy4yLiDDiWNyYW4gZCdhY2N1ZWlsDQoNCi0gw4AgcGFydGlyIGR1IG1lbnUgZGUgZ2F1Y2hlLCBpbCBlc3QgcG9zc2libGUgZGUgYENyw6llciB1biBwcm9qZXRgLCBgT3V2cmlyIHVuIHByb2pldGAgKGhpc3RvcmlxdWUgZGVzIHByb2pldHMgZW5yZWdpc3Ryw6lzKSBvdSBgSW1wb3J0ZXIgdW4gcHJvamV0IGAgKGFyY2hpdmVzIC56aXAgc2UgdHJvdXZhbnQgZGFucyBsZSBkb3NzaWVyIGRlIHRyYXZhaWwpLiAgIA0KDQotIFBvdXIgY2hhbmdlciBsYSBsYW5ndWUgZGUgbCdpbnRlcmZhY2UgYXUgZnJhbsOnYWlzLCBjbGlxdWVyIHN1ciBsJ29uZ2xldCBgTGFuZ3VlYCBkYW5zIGxlIG1lbnUgZGUgZ2F1Y2hlLiAgDQoNCi0gTGUgZmljaGllciBwZXV0IMOqdHJlIGNyw6nDqSDDoCBwYXJ0aXIgZGUgZGlmZsOpcmVudGVzIHNvdXJjZXM6IGBDZXQgb3JkaW5hdGV1cmAgKHBvc3RlIGxvY2FsKSwgYEFkcmVzc2VzIHdlYiAoVVJMcylgLCBgUHJlc3NlLXBhcGllcmAgKGNvcGnDqS1jb2xsw6kpLCBgR29vZ2xlIGRhdGFgIChHb29nbGUgc2hlZXRzKS4uLikgZXQgZW4gZGlmZsOpcmVudHMgZm9ybWF0cyAoLmNzdiwgLnR4dCwgLnhtbCwgLnhscywgLkpTT04sIC56aXAuLi4gKGNlcnRhaW5lcyBleHRlbnNpb25zIHBlcm1ldHRlbnQgbCd1c2FnZSBkJ2F1dHJlcyBmb3JtYXRzIGNvbW1lIHJkZikuICANCg0KPGNlbnRlcj4gIA0KDQohW10oaW1hZ2VzL09SMS5qcGcpICANCg0KPC9jZW50ZXI+ICANCg0KLSBEZXV4IGZpY2hpZXJzIG91IHBsdXMgcGV1dmVudCDDqnRyZSBpbXBvcnTDqXMgZW4gbcOqbWUgdGVtcHMuIExlcyBsaWduZXMgc2Vyb250IGltcG9ydMOpZXMgdW5lIMOgIGxhIHN1aXRlIGRlIGwnYXV0cmUgc2Vsb24gbCdvcmRyZSBkJ2ltcG9ydGF0aW9uICh1bmUgY29sb25uZSBwZXJtZXR0YW50IGQnaWRlbnRpZmllciBsZSBmaWNoaWVyIHNvdXJjZSBzZXJhIGNyw6nDqWUgYXV0b21hdGlxdWVtZW50KS4gDQoNCjwvYnI+DQoNCioqKg0KDQoNCiMjIDMuMy4gSGlzdG9yaXF1ZSBkZXMgcHJvamV0cw0KDQotIEwnb25nbGV0IGBPdXZyaXIgdW4gcHJvamV0YCBwZXJtZXQ6DQogIC0gRCdhY2PDqWRlciBldCBkJ291dnJpciB0b3VzIGxlcyBwcm9qZXRzIGVucmVnaXN0csOpcyBsb2NhbGVtZW50Lg0KICAtIEQnw6lkaXRlciBzZXMgbcOpdGFkb25uw6llcy4NCiAgLSBEJ2FjY8OpZGVyIGF1IGRvc3NpZXIgZGUgdHJhdmFpbCAoZMOpZmluaSBwYXIgZMOpZmF1dCkgb8O5IE9wZW5SZWZpbmUgc3RvY2tlIGxlcyBhcmNoaXZlcyBkZXMgcHJvamV0cyBlbnJlZ2lzdHLDqXMgcGFyIGxlIGJpYWlzIGR1IGxpZW4gYFBhcmNvdXJpciBsZSBkb3NzaWVyIGRlIGwnZXNwYWNlIGRlIHRyYXZhaWxgLg0KDQo8Y2VudGVyPiAgDQoNCiFbXShpbWFnZXMvT1IzLmpwZykNCg0KPC9jZW50ZXI+ICANCg0KPC9icj4NCg0KKioqDQoNCg0KIyA0LiBDcsOpZXIgdW4gcHJvamV0DQoNCi0gUG91ciBvdXZyaXIgdW4gZmljaGllciDDoCBwYXJ0aXIgZGUgc29uIHBvc3RlLCBjbGlxdWVyIHN1ciBgQ3LDqWVyIHVuIHByb2pldGAgLSA+IGBDZXQgb3JkaW5hdGV1cmAgLSA+IGBzw6lsZWN0aW9ubmVyIGZpY2hpZXJzYCBzdXIgc29uICBwb3N0ZSAtPiBgU3VpdmFudGAuICANCg0KLSBVbmUgZmVuw6p0cmUgcydvdXZyZSBlbnN1aXRlIHBvdXIgcGVybWV0dHJlIGRlIHByw6ktdmlzdWFsaXNlciBzb24gamV1IGRlIGRvbm7DqWVzIGV0IGRlIG1vZGlmaWVyLCBzaSBuw6ljZXNzYWlyZSwgbGVzIG9wdGlvbnMgZCdpbXBvcnRhdGlvbiBlbiBmb25jdGlvbiBkZXMgY2FyYWN0w6lyaXN0aXF1ZXMgZHUgZmljaGllciBkZSBkb25uw6llczogbW9kaWZpY2F0aW9uIGR1IGZvcm1hdCBkZSBmaWNoaWVyIHMnaWwgbidhIHBhcyDDqXTDqSBpZGVudGlmacOpIGNvcnJlY3RlbWVudCAoNSksIGwnZW5jb2RhZ2UgZGVzIGNhcmFjdMOocmVzIFtVVEYtOF0gKDYpLCBsZSB0cmFpdGVtZW50IGRlcyBlbnTDqnRlcyBldCBwcmVtacOocmVzIGxpZ25lcyAoOSkuLi4NCg0KPC9icj4NCg0KIVtdKGltYWdlcy9PUjIuanBnKSAgDQoNCg0KIyMgRXhlcmNpY2UNCg0KPGRpdiBjbGFzcyA9ICJib3gxIj4NCi0gQ3LDqWVyIHVuIG5vdXZlYXUgcHJvamV0IGVuIGltcG9ydGFudCB1biBmaWNoaWVyIMOgIHBhcnRpciBkZSBzb24gZW1wbGFjZW1lbnQgc3VyIEdpdGh1YjogaHR0cHM6Ly9naXRodWIuY29tL0NSTE5QL29wZW5yZWZpbmUgDQogIC0gQ2xpcXVlciBzdXIgbGUgZmljaGllciAqSW5jaWRlbnRzIG3DqXRyby1tdGwuY3N2KiAtPiBDbGlxdWVyIHN1ciBsZSBib3V0b24gUkFXIC0+IGNvcGllciBsJ2FkcmVzc2UgZHUgbmF2aWdhdGV1ci4NCiAgLSBEYW5zIE9wZW5SZWZpbmUsIENyw6llciB1biBwcm9qZXQgLT4gQWRyZXNzZXMgd2ViIChVUkxzKSAtPiBjb2xsZXIgbGUgbGllbiAtPiBTdWl2YW50Lg0KKExlIGZpY2hpZXIgZXN0IGF1c3NpIGRpc3BvbmlibGUgc3VyIGxlIHNpdGUgW0Rvbm7DqWVzIG91dmVydGVzIE1vbnRyw6lhbF0oaHR0cHM6Ly9kb25uZWVzLm1vbnRyZWFsLmNhL3NvY2lldGUtZGUtdHJhbnNwb3J0LWRlLW1vbnRyZWFsL2luY2lkZW50cy1kdS1yZXNlYXUtZHUtbWV0cm8pKS4gICAgIA0KDQotIEV4cGxvcmVyIGxlcyBvcHRpb25zIGQnaW1wb3J0YXRpb24gLT4gUG9ydGVyIHVuZSBhdHRlbnRpb24gcGFydGljdWxpw6hyZSBhdXggb3B0aW9uczogYFN1cHByaW1lciBsZXMgZXNwYWNlc2AgKDggLT4gY29jaGVyKSwgCWBVdGlsaXNlciBsZSBjYXJhY3TDqHJlCSIgLi4uYCAoMTAgLT4gKipjb2NoZXIqKiksIGBBbmFseXNlciBsZSB0ZXh0ZSBkZXMgY2VsbHVsZXMgY29tbWUgbm9tYnJlcyAsIGRhdGVz4oCmYCAoMTEgLT4gZMOpY29jaGVyKQ0KDQotIENoYW5nZXIgbGUgYE5vbSBkdSBwcm9qZXRgIFsyXSBldCBjbGlxdWVyIHN1ciBgQ3LDqWVyIHVuIHByb2pldGAgWzRdIC0gRW4gY2FzIGRlIHByb2Jsw6htZSwgaWwgZXN0IHBvc3NpYmxlIGRlIHJlY29tbWVuY2VyIGxlIHByb2Nlc3N1cyBbMV0uDQo8L2Rpdj4NCg0KPC9icj4NCg0KKioqDQoNCg0KIyA1LiBFeHBsb3JlciBsJ2ludGVyZmFjZQ0KDQotIEwnaW50ZXJmYWNlIGVzdCBzaW1pbGFpcmUgw6AgRXhjZWwgbWFpcyBvbiBuZSBwZXV0IHZvaXIgbCdlbnNlbWJsZSBkZXMgbGlnbmVzLCBsYSAibG9naXF1ZSIgZCdPcGVuUmVmaW5lIHJlcG9zZSBzdXIgbGUgdHJhdmFpbCBlbiAqKmNvbG9ubmVzKiouDQoNCi0gT3BlblJlZmluZSBwcm9wb3NlIGRldXggdnVlcyBkZXMgZG9ubsOpZXM6IGBsaWduZXNgIGV0IGBlbnRyw6llcy5gIExlcyBkb25uw6llcyBzb250IGfDqW7DqXJhbGVtZW50IHByw6lzZW50w6llcyBlbiBtb2RlIGBsaWduZXNgLCBjJ2VzdC3DoC1kaXJlIGNoYXF1ZSBsaWduZSByZXByw6lzZW50ZSB1bmUgb2JzZXJ2YXRpb24uIExlIG1vZGUgYGVudHLDqWVzYCBwZXJtZXQgZCdhc3NvY2llciBwbHVzaWV1cnMgbGlnbmVzIMOgIHVuZSBvYnNlcnZhdGlvbi4NCg0KLSBJbCBlc3QgZG9uYyBwb3NzaWJsZSBkZSBtb2RpZmllciBsYSBzdHJ1Y3R1cmUgZHUgZmljaGllciBwb3VyIHF1ZSBwbHVzaWV1cnMgbGlnbmVzIHNvaWVudCBhc3NvY2nDqWVzIMOgIHVuIHNldWwgY2FzIGVuIHNlIGJhc2FudCBzdXIgbGEgY29sb25uZSBjbMOpICgqKnNldWxlIGxhIGxpZ25lIG9yaWdpbmFsZSBzZXJhIG51bcOpcm90w6llKiopLCBtYWlzIGRvaXQgc2UgZmFpcmUgYXZlYyBwcsOpY2F1dGlvbnMuIFBvdXIgbGVzIGxvZ2ljaWVscyBkJ2FuYWx5c2UsIGxlIGZvcm1hdCAqdGlkeSogKGBsaWduZXNgKSBlc3Qgw6AgcHJpdmlsw6lnaWVyLg0KDQo8Y2VudGVyPiAgDQoNCiFbXShpbWFnZXMvT1I0LmpwZykgDQoNCjwvY2VudGVyPiAgDQoNCjEuIExpZW4gc291cyBsJ2ljw7RuZSByZW52b2kgdmVycyBsYSBwYWdlIGQnYWNjdWVpbC9pbXBvcnRhdGlvbi4NCjIuIFJlbm9tbWVyIGxlIG5vbSBkZSBzb24gcHJvamV0IGVuIHRvdXQgdGVtcHMuDQozLiBQZXJtYWxpZW4gcXVpIHBlcm1ldCBkZSByZXZlbmlyIMOgIHVuZSB2dWUgcHLDqWNpc2UgKGFmZmljaGFnZSwgdHJpLCBmYWNldHRlcy4uLikgZHUgcHJvamV0Lg0KNC4gTm9tYnJlIGRlIGxpZ25lcy9vYnNlcnZhdGlvbnMgZHUgZmljaGllci4NCjUuIENoYW5nZW1lbnQgZHUgbW9kZSBsaWduZXMgb3Ugb2JzZXJ2YXRpb25zLg0KNi4gTW9kaWZpZXIgbGUgbm9tYnJlIGRlIGxpZ25lcyBhZmZpY2jDqWVzLg0KNy4gUGFzc2VyIGQndW5lIHBhZ2Ugw6AgbCdhdXRyZS4NCjguIE91dnJpciB1biBub3V2ZWwgb25nbGV0IE9wZW5SZWZpbmUuDQo5LiBFeHBvcnRlciBsZSBmaWNoaWVyIGVuIGRpZmbDqXJlbnRzIGZvcm1hdHMuDQoNCjwvYnI+DQoNCioqKg0KDQoNCiMjIDUuMS4gTCfDqWRpdGlvbiBkZSBjZWxsdWxlcw0KDQotIElsIGVzdCBwb3NzaWJsZSBkJ8OpZGl0ZXIgbWFudWVsbGVtZW50IGxlIGNvbnRlbnUgZGUgY2VsbHVsZXMgaW5kaXZpZHVlbGxlcyBlbiBzZSBwbGHDp2FudCBzdXIgY2hhY3VuZSBldCBlbiBjbGlxdWFudCBgZWRpdGAsIG1haXMgT3BlblJlZmluZSBwcml2aWzDqWdpZSBsZSAqKnRyYXZhaWwgZW4gbG90IHBhciBjb2xvbm5lcyoqIHBvdXIgZmlsdHJlciwgdHJpZXIsIHRyYW5zZm9ybWVyLg0KDQotIEwnw6lkaXRpb24gZGlyZWN0ZSBwZXV0IHMnYXBwbGlxdWVyIGluZGl2aWR1ZWxsZW1lbnQgb3Ugc3VyIHRvdXRlcyBsZXMgY2VsbHVsZXMgYXZlYyBsYSBtw6ptZSB2YWxldXIgZGFucyBjZXR0ZSBjb2xvbm5lLg0KDQotIFBlcm1ldCDDqWdhbGVtZW50IGRlIG1vZGlmaWVyIGxlIGZvcm1hdCBkZSBsYSBjZWxsdWxlLg0KDQo8Y2VudGVyPiAgDQoNCiFbXShpbWFnZXMvT1IyMi5qcGcpe3dpZHRoPTgwJX0NCg0KPC9jZW50ZXI+ICANCg0KDQoNCiMjIEV4ZXJjaWNlDQoNCjxkaXYgY2xhc3MgPSAiYm94MSI+DQotIERhbnMgbGEgY29sb25uZSAqQ2F1c2UgcHJpbWFpcmUqIGNsaXF1ZXIgZGFucyB1bmUgY2VsbHVsZSAqQXV0cmVzKiwgw6lkaXRlciBzb24gY29udGVudSBwb3VyICphdXRyZSogZXQgYXBwbGlxdWVyIMOgIGxhIGNlbGx1bGUuIA0KDQotIERhbnMgbGEgY29sb25uZSAqw4l2YWN1YXRpb24qLCBtb2RpZmllciBsZSBjb250ZW51IGQndW5lIGNlbGx1bGUgIiMiIHBhciAqTm9uKiBldCBhcHBsaXF1ZXIgw6AgdG91dGVzIGxlcyBjZWxsdWxlcyBpZGVudGlxdWVzLg0KPC9kaXY+DQoNCjwvYnI+DQoNCioqKg0KDQoNCiMjIDUuMi4gRm9ybWF0IGRlcyBkb25uw6llcyAgDQoNCg0KIyMjIyBUcm9pcyBmb3JtYXRzIGRlIGJhc2U6IA0KICAxLiBDaGHDrm5lIGRlIGNhcmFjdMOocmVzDQogIDIuIE5vbWJyZQ0KICAzLiBEYXRlIChub3JtZSBJU08tODYwMSBZWVlZLU1NLUREVEhIOk1NOlNTWikqDQogIA0KDQogIA0KIyMjIyBEZXV4IGZvcm1hdHMgZMOpY291bGFudCBkJ2FjdGlvbnM6IA0KICAtIEVycmV1ciAoZm9ybWF0IGF0dHJpYnXDqSBzdWl0ZSDDoCB1bmUgZXJyZXVyIGRlIHRyYW5zZm9ybWF0aW9uKSAgDQogIC0gTnVsbCoqDQoNCg0KDQojIyMjIERldXggYXV0cmVzIHR5cGVzIHBhcnRpY3VsaWVycyBkw6ljb3VsYW50IGRlIG1hbmlwdWxhdGlvbnMNCiAgLSBCb29sw6llbiAodmFsZXVyIGJpbmFpcmUgVCBvdSBGKQ0KICAtICpBcnJheSogKGxpc3RlIGRlIHZhbGV1cnMgc8OpcGFyw6llcyBwYXIgdW5lIHZpcmd1bGUgZW50cmUgY3JvY2hldHMgcG91dmFudCDDqnRyZSB0cmFuc2Zvcm3DqWVzKQ0KDQo8L2JyPg0KDQojIyMjIyAqIEZvcm1hdCBkYXRlDQoNCi0gU2Vsb24gbGVzIGJlc29pbnMsIGxlcyBkYXRlcyBwZXV2ZW50IMOqdHJlIHRyYWl0w6llcyBzb3VzIGZvcm1lIGRlIGB0ZXh0ZWAsIGRlIGBub21icmVgIG91IGBkYXRlYCAobGUgZm9ybWF0IGRhdGUgZXN0IHN1cnRvdXQgbsOpY2Vzc2FpcmUgcG91ciBsZXMgY2FsY3VscyBkZSBkYXRlcykuDQotIExlIGZvcm1hdCBkYXRlIHJlcG9zZSBzdXIgdW5lIHPDqXJpZSBkJ291dGlscyBldCBkZSAgc3RhbmRhcmRzIHBvdXIgcmVjb25uYWl0cmUgZXQgY29udmVydGlyIGxlcyB2YWxldXJzIG9yaWdpbmFsZXMgZW4gZGF0ZS4gDQotIFBvdXIgcXUndW5lIGNlbGx1bGUgc29pdCByZWNvbm51ZSBjb21tZSBkYXRlLCBlbGxlIHNlcmEgdHJhbnNmb3Jtw6llIGF1IGZvcm1hdCAqSVNPLTg2MDEtY29tcGxpYW50Ki4NCi0gUG9zc2libGUgZGUgbW9kaWZpZXIgY2UgZm9ybWF0IHBvdXIgcXUnaWwgc29pdCBwbHVzIGZhY2lsZW1lbnQgbGlzaWJsZSDDoCBsJ2V4cG9ydGF0aW9uLg0KDQo8L2JyPg0KDQojIyMjIyAqKiBGb3JtYXQgIm1hbnF1YW50Ig0KDQotIE9wZW5SZWZpbmUgZmFpdCB1bmUgZGlzdGluY3Rpb24gZW50cmUgbGVzICoqY2VsbHVsZXMgdmlkZXMgYXZlYyBlc3BhY2VzIGJsYW5jcyoqIChxdWkgbmUgc29udCBwYXMgdmlkZXMhKSwgbGVzICoqdmFsZXVycyB2aWRlcyoqIChjaGFpbmUgZGUgbG9uZ3VldXIgMCksIGV0IGxlcyAqKnZhbGV1cnMgIm51bGwiKiogKHR5cGUgc3DDqWNpYWwgcXVpIG4nZXN0IHBhcyB1bmUgY2hhaW5lIGRlIGNhcmFjdMOocmVzKS4gTGVzICp2aWRlcyogZXQgbGVzICpudWxsKiBzb250IGF1c3NpIGNvbnNpZMOpcsOpcyBjb21tZSAqQmxhbmsqLg0KLSBQbHVzaWV1cnMgZm9uY3Rpb25zIGF1dG9tYXRpc8OpZXMgc291cyBgRmFjZXR0ZXNgIGV0IGDDiWRpdGVyIGxlcyBjZWxsdWxlc2AgcGVybWV0dGVudCBkZSBnw6lyZXIgY2VzIHR5cGVzIGRlIHZhbGV1cnMuDQoNCjwvYnI+DQoNCiMjIEV4ZXJjaWNlDQoNCjxkaXYgY2xhc3MgPSAiYm94MSI+DQoNCioqVHJhbnNmb3JtZXIgdW5lIGNvbG9ubmUgZGUgZm9ybWF0IGNhcmFjdMOocmUgZW4gZm9ybWF0IGRhdGUqKjogIA0KLSBEYW5zIGxhIGNvbG9ubmUgKkpvdXIgY2FsZW5kYWlyZSo6IGBNZW51IC0+IMOJZGl0ZXIgbGVzIGNlbGx1bGVzIC0+IFRyYW5zZm9ybWF0aW9ucyBjb3VyYW50ZXMgLT4gRW4gZGF0ZWAgICAgDQoNCioqVHJhbnNmb3JtZXIgdW5lIGNvbG9ubmUgZGUgZm9ybWF0IGNhcmFjdMOocmUgZW4gZm9ybWF0IG5vbWJyZSoqOiAgIA0KLSBEYW5zIGxhIGNvbG9ubmUgKlBvcnRlKiwgY2xpcXVlciBkYW5zIHVuZSBjZWxsdWxlLCDDqWRpdGVyIGxlIGZvcm1hdCDDoCAqTm9tYnJlKiBldCBhcHBsaXF1ZXIgw6AgdG91dGVzIGxlcyBjZWxsdWxlcyBpZGVudGlxdWVzLg0KLSBSZWNvbW1lbmNlciBsYSBwcm9jw6lkdXJlIGF2ZWMgbGUgZm9uY3Rpb24gKlRyYW5zZm9ybWF0aW9ucyBjb3VyYW50ZXMqLg0KDQo8L2Rpdj4NCg0KPC9icj4NCg0KPGRpdiBjbGFzcyA9ICJub3RlIj4NCi0gw4AgbCdpbXBvcnRhdGlvbiBkJ3VuIGZpY2hpZXIsIGNoYXF1ZSBjZWxsdWxlIHNlIHZlcnJhIGF0dHJpYnVlciB1biBmb3JtYXQuIA0KLSBQYXIgZMOpZmF1dCwgbGUgY29udGVudSBkZXMgY2VsbHVsZXMgZXN0IGRlIGZvcm1hdCBjaGHDrm5lcy4gIA0KLSBMZSBjb250ZW51IGRlcyBjZWxsdWxlcyByZWNvbm51IGNvbW1lIG51bcOpcmlxdWUgZXQgZGF0ZSBzZXJhIGRlIGNvdWxldXIgdmVydGUuICANCi0gTGUgZm9ybWF0IHBldXQgw6p0cmUgbW9kaWZpw6kgZGUgZGlmZsOpcmVudGVzIGZhw6dvbnM6IEJvdXRvbiBgZWRpdGAsIGBUcmFuc2Zvcm1hdGlvbnMgY291cmFudGVzYCwgRmVuw6p0cmUgR1JFTC4gIA0KLSBDZSBmb3JtYXQgYXVyYSB1biBpbXBhY3Qgc3VyIGxlcyBhY3Rpb25zIHBvc3NpYmxlcy4gIA0KLSBMZSBjaGFuZ2VtZW50IGRlIGZvcm1hdCBwYXIgw6lkaXRpb24gZGlyZWN0ZSBkJ3VuZSBjZWxsdWxlIGVzdCB1bmUgb3DDqXJhdGlvbiBkaXN0aW5jdGUgZGUgbGEgdHJhbnNmb3JtYXRpb24gZHUgY29udGVudS4gTGEgcHJlbWnDqHJlIG9ww6lyYXRpb24gYXJyaXZlIHBhcmZvaXMgw6AgY2hhbmdlciBkZXMgZm9ybWF0cyBxdWUgbGEgdHJhbnNmb3JtYXRpb24gbmUgcGV1dCBmYWlyZS4NCi0gUG91ciBwbHVzIGQnaW5mb3JtYXRpb24gc3VyIGxlcyBmb3JtYXRzLCB2b2lyIGxhIFtkb2N1bWVudGF0aW9uIG9mZmljaWVsbGVdKGh0dHBzOi8vZG9jcy5vcGVucmVmaW5lLm9yZy9tYW51YWwvZXhwbG9yaW5nKS4gIA0KPC9kaXY+DQoNCjwvYnI+DQoNCioqKg0KDQoNCiMjIDUuMy4gTGEgZ2VzdGlvbiBkZXMgbGlnbmVzIGV0IGNvbG9ubmVzDQoNCiMjIyMgTGEgZ2VzdGlvbiBkZXMgY29sb25uZXMgcGV1dCBzZSBmYWlyZToNCg0KLSBTdXIgY2hhcXVlIGNvbG9ubmU6IA0KICAtIEZvbmN0aW9ucyBzb3VzIGDDiWRpdGVyIGxhIGNvbG9ubmUgLT4gRMOpcGxhY2VyIC4uLiAvIFJlbm9tbWVyIC8gU3VwcHJpbWVyYCAgIA0KICAtIEZvbmN0aW9ucyBzb3VzIGBBcGVyw6d1IC0+IE1hc3F1ZXIuLi4gYCAgIA0KDQo8L2JyPg0KDQotIFN1ciBsYSBjb2xvbm5lIGBUb3V0ZXNgOiAgICAgDQogIC0gYMOJZGl0ZXIgbGVzIGNvbG9ubmVzIC0+IFJldHJpZXItc3VwcHJpbWVyLCBnZXN0aW9uIGRlcyB2YWxldXJzIGNvbnPDqWN1dGl2ZXNgICAgIA0KICAtIGBBcGVyw6d1IC0+IEFmZmljaGVyLW1hc3F1ZXJgLi4uICANCg0KPC9icj4NCg0KIyMjIyBMYSBnZXN0aW9uIGRlcyBsaWduZXM6DQoNCi0gTGEgc8OpbGVjdGlvbiBkZSBsaWduZXMgcGV1dCBzZSBmYWlyZSBwYXIgbGUgYmlhaXMgZGUgZmlsdHJlcywgZmFjZXR0ZXMgZXQgYXV0cmVzIG1hbmlwdWxhdGlvbnMgcGVyc29ubmFsaXPDqWVzLiAgDQotIElsIGVzdCBhdXNzaSBwb3NzaWJsZSBkZSBtYXJxdWVyL8OpdG9pbGVyIGRlcyBsaWduZXMgZW4gbG90IG91IGluZGl2aWR1ZWxsZW1lbnQgcHVpcyBkZSBjcsOpZXIgdW5lIGZhY2V0dGUgc3VyIGxhIGNvbG9ubmUgYFRvdXRlc2AgcG91ciBzw6lsZWN0aW9ubmVyIGxlcyBsaWduZXMgbWFycXXDqWVzIChgdHJ1ZWApLiAgDQotIE9uIHBldXQgZW5zdWl0ZSBzdXBwcmltZXIgbGVzIGxpZ25lcyBmaWx0csOpZXM6IGBUb3V0ZXMgLT4gw4lkaXRlciBsZXMgbGlnbmVzIC0+IFN1cHByaW1lciBsZXMgbGlnbmVzIGNvcnJlc3BvbmRhbnRlc2AuICANCg0KPC9icj4NCg0KIyMgRXhlcmNpY2UNCg0KPGRpdiBjbGFzcyA9ICJib3gxIj4NCioqU3VwcHJpbWVyIHVuZSBjb2xvbm5lOiAqKiAgDQotIFN1ciBsYSBjb2xvbm5lICpUeXBlIGQnaW5jaWRlbnQqIC0+IGDDiWRpdGVyIGxhIGNvbG9ubmUgLT4gU3VwcHJpbWVyIGNldHRlIGNvbG9ubmVgLiAgDQoNCioqU3VwcHJpbWVyIHBsdXNpZXVycyBjb2xvbm5lczogKiogIA0KLSBTdXIgbGEgY29sb25uZSAqVG91dGVzKiAtPiBgw4lkaXRlciBsYSBjb2xvbm5lIC0+IMOJZGl0ZXIvU3VwcHJpbWVyIGxlcyBjb2xvbm5lc2AgLT4gKktGUyogZXQgKkNBVCouICANCg0KPC9kaXY+DQoNCioqKg0KDQoNCiMjIDUuNC4gSGlzdG9yaXF1ZSAoVW5kby9SZWRvKQ0KDQotIFRvdXRlcyBsZXMgYWN0aW9ucyBzb250IGVucmVnaXN0csOpZXMgKGxvZyBkZSBzZXMgbWFuaXB1bGF0aW9ucykgZXQgcGV1dmVudCDDqnRyZSBhbm51bMOpZXMgZW4gcmVjdWxhbnQgw6l0YXBlIHBhciDDqXRhcGUgZGFucyBsJ2hpc3RvcmlxdWUuICANCi0gTGEgcHJlbWnDqHJlIGFjdGlvbiBkJ3VuIGhpc3RvcmlxdWUgZXN0IGxhIGNyw6lhdGlvbiBkdSBwcm9qZXQuICANCi0gUHVpc3F1ZSBsJ2hpc3RvcmlxdWUgZmFpdCBwYXJ0aWUgZHUgcHJvamV0IGVucmVnaXN0csOpIGRhbnMgbGUgZG9zc2llciBkZSB0cmF2YWlsLCBpbCBuZSBkaXNwYXJhaXQgcGFzIMOgIGxhIGZlcm1ldHVyZSBkZSBsYSBzZXNzaW9uLiANCi0gTCdoaXN0b3JpcXVlIHBldXQgw6p0cmUgZXh0cmFpdCBlbiBmb3JtYXQgSlNPTiwgY29waWVyL2NvbGxlciBkYW5zIG5vdGVwYWQgZXQgYXBwbGlxdWVyIGRlIG5vdXZlYXUuICANCg0KPGNlbnRlcj4gIA0KDQohW10oaW1hZ2VzL09SMTkuanBnKXt3aWR0aD02MCV9DQoNCjwvY2VudGVyPiAgDQoNCioqQXR0ZW50aW9uISoqDQoNCi0gU2kgb24gcmVjdWxlIGRhbnMgbGUgdGVtcHMgZXQgcXUnb24gZmFpdCB1bmUgbW9kaWZpY2F0aW9uLCBsZXMgw6l0YXBlcyBxdWkgc3VpdmVudCBkYW5zIGwnaGlzdG9yaXF1ZSBkaXNwYXJhaXNzZW50IHBvdXIgZGUgYm9uLiAgDQoNCi0gTGVzIG1hbmlwdWxhdGlvbnMgcmVsYXRpdmVzIMOgIGwnYWZmaWNoYWdlIG5lIHNvbnQgcGFzIGVucmVnaXN0csOpZXMgZGFucyBsJ2hpc3RvcmlxdWUsIHNldWxlbWVudCBsZXMgdHJhbnNmb3JtYXRpb25zLiBMJ2VucmVnaXN0cmVtZW50IGF1dG9tYXRpcXVlIG5lIGNvbXByZW5kIGRvbmMgcGFzIGxlcyBmYWNldHRlcyBldCBmaWx0cmVzICh2dWUgZGUgbCdpbnRlcmZhY2UpIC0gcGVyZCBjZSBxdWkgbidhcHBhcmFpdCBwYXMgZGFucyBsZSBgRMOpZmFpcmUvUmVmYWlyZWAuDQoNCi0gTCfDqWRpdGlvbiBkaXJlY3RlIGRhbnMgbGVzIGNlbGx1bGVzIGFwcGFyYWl0IGRhbnMgbCdoaXN0b3JpcXVlIG1haXMgbmUgcGV1dCDDqnRyZSBleHBvcnTDqWUuICANCg0KLSBGYWNldHRlcyBldCBmaWx0cmVzIHMnZW5yZWdpc3RyZW50IGdyw6JjZSBhdSBgcGVybWFsaWVuYC4gIA0KDQo8L2JyPg0KDQoqKioNCg0KDQojIDYuIE1lbnUgZXQgZm9uY3Rpb25zDQoNCk9wZW4gUmVmaW5lIHBlcm1ldCBkZSB0cmF2YWlsbGVyIGRlICoqZGV1eCBmYcOnb25zKio6ICANCg0KDQoxLiBBdmVjIGwnZW5zZW1ibGUgZGVzICoqZm9uY3Rpb25zIGF1dG9tYXRpc8OpZXMqKiBxdWUgbCdvbiByZXRyb3V2ZSBkYW5zIGxlcyBtZW51cy4NCg0KMi4gRW4gcsOpZGlnZWFudCBzZXMgcHJvcHJlcyBbZXhwcmVzc2lvbnNdKGh0dHBzOi8vZG9jcy5vcGVucmVmaW5lLm9yZy9tYW51YWwvZXhwcmVzc2lvbnMpIGF2ZWMgbGUgKipsYW5nYWdlIEdSRUwqKi4gIA0KDQogIC0gTcOqbWUgbG9yc3F1ZSBsJ29uIHV0aWxpc2UgbGVzIGZvbmN0aW9ucyBhdXRvbWF0aXPDqWVzLCBpbCBlc3QgcG9zc2libGUgZCdlbiBtb2RpZmllciBsZSBmb25jdGlvbm5lbWVudCBlbiDDqWRpdGFudCBkaXJlY3RlbWVudCBsYSBzeW50YXhlIEdSRUwgY29ycmVzcG9uZGFudGUuIA0KDQo8L2JyPg0KDQojIyA2LjEuIFV0aWxpc2VyIGxlcyBmb25jdGlvbnMgYXV0b21hdGlzw6llczoNCg0KLSBMZSBtZW51IGV0IGwnZW5zZW1ibGUgZGUgc2VzIGZvbmN0aW9ucyBhdXRvbWF0aXPDqWVzIGFwcGFyYWlzc2VudCBlbiBjbGlxdWFudCBzdXIgbGEgZmzDqGNoZSBkZSBsJ2ludGl0dWzDqSBkZSBjaGFxdWUgY29sb25uZS4NCg0KLSBMZXMgZm9uY3Rpb25zIGRpc3BvbmlibGVzIHNvdXMgbGUgbWVudSBkZSBsYSBwcmVtacOocmUgY29sb25uZSBgVG91dGVzYCBzZSBkaXN0aW5ndWVudCBkZXMgYXV0cmVzIHB1aXNxdSdlbGxlcyBwZXJtZXR0ZW50IGQnYXBwbGlxdWVyIGRlcyBmb25jdGlvbnMgw6AgbCdlbnNlbWJsZSBkZXMgY29sb25uZXMgZHUgZmljaGllcjogTWFycXVlciwgw6l0b2lsZXIsIHN1cHByaW1lciwgbWFzcXVlci4uLg0KDQo8L2JyPg0KDQoqKk1lbnUgZXQgZm9uY3Rpb25zIGRlIGNoYXF1ZSBjb2xvbm5lLXZhcmlhYmxlKioNCg0KPC9icj4NCg0KIVtdKGltYWdlcy9PUjEyLmpwZyl7d2lkdGg9OTAlfQ0KDQo8L2JyPg0KDQoqKk1lbnUgZXQgZm9uY3Rpb25zIGRlIGxhIGNvbG9ubmUgYFRvdXRlc2AqKg0KDQohW10oaW1hZ2VzL09SMjEuanBnKXt3aWR0aD05MCV9DQoNCjwvYnI+DQoNCioqKg0KDQojIyA2LjIuIMOJY3JpcmUgc2VzIGZvbmN0aW9ucyBhdmVjIEdSRUwNCg0KPC9icj4NCg0KRXhwcmVzc2lvbnMgc2ltaWxhaXJlcyBhdXggZm9ybXVsZXMgRXhjZWwgbWFpcyBxdWkgcydhcHBsaXF1ZW50IGF1eCBjb2xvbm5lcywgbm9uIGF1eCBjZWxsdWxlcywgZXQgcXVpIG5lIHNvbnQgcGFzIHN0b2Nrw6llcyDDoCBtw6ptZSBsZXMgZG9ubsOpZXMgbWFpcyBkYW5zIHVuIHNjcmlwdC4gIA0KDQo8L2JyPg0KDQohW10oaW1hZ2VzL09SMTQuanBnKQ0KDQo8L2JyPg0KDQoqKkxlIGxhbmdhZ2UgR1JFTCBwZXV0IHMndXRpbGlzZXIgZGUgZGlmZsOpcmVudGVzIGZhw6dvbnM6KiogIA0KDQotIEVuIGNyw6lhbnQgZGVzIGZhY2V0dGVzIHBlcnNvbm5hbGlzw6llcyA6IGBGYWNldHRlIC0+IEZhY2V0dGUgdGV4dHVlbGxlIHBlcnNvbm5hbGlzw6llYC4gIA0KDQotIEVuIHRyYW5zZm9ybWFudCB1bmUgY29sb25uZTogYMOJZGl0ZXIgbGVzIGNlbGx1bGVzIC0+IHRyYW5zZm9ybWVyYCAoYXVzc2kgc291cyBgVG91dGVzIC0+IFRyYW5zZm9ybWVyYCkuICANCg0KLSBFbiBjcsOpYW50IHVuZSBub3V2ZWxsZSBjb2xvbm5lOiBgw4lkaXRlciBsYSBjb2xvbm5lIC0+IEFqb3V0ZXIgdW5lIGNvbG9ubmUgYmFzw6llIHN1ciBjZXR0ZSBjb2xvbm5lYC4gIA0KDQo8L2JyPg0KDQoqKkxlcyBmaWx0cmVzIGV0IGxlcyB0cmFuc2Zvcm1hdGlvbnMgcGx1cyBjb21wbGV4ZXMgcGV1dmVudCBhdXNzaSBuw6ljZXNzaXRlciBsJ3VzYWdlIGQnW2V4cHJlc3Npb25zIHLDqWd1bGnDqHJlcyAocmVnZXgpXShodHRwczovL3JlZ2V4MTAxLmNvbS8pKioNCg0KPC9icj4NCg0KKioqDQoNCg0KIyMgNi4zLiBUcmllciB1biBmaWNoaWVyDQoNCi0gTGVzIGRvbm7DqWVzIGFwcGFyYWlzc2VudCBkYW5zIGwnb3JkcmUgZHUgZmljaGllciBvcmlnaW5hbC4NCi0gUG91ciBtb2RpZmllciBsJ29yZHJlIGQnYXBwYXJpdGlvbiBkZXMgb2JzZXJ2YXRpb25zLCBhcHBsaXF1ZXIgdW4gb3UgZGVzIHRyaXMgc3VyIGxlcyBjb2xvbm5lcyBhdmVjIGBUcmllci4uLmANCi0gUG91ciBjb21iaW5lciBwbHVzaWV1cnMgdHJpcyBzdXIgZGlmZsOpcmVudGVzIGNvbG9ubmVzOiBGYWlyZSB1biB0cmllIHN1ciB1bmUgY29sb25uZSBwdWlzIHN1ciB1bmUgYXV0cmUgZW4gbW9kaWZpYW50IHNpIG7DqWNlc3NhaXJlIGwnb3B0aW9uIGBUcmllciBzZWxvbiBjZXR0ZSBzZXVsZSBjb2xvbm5lYC4NCi0gTGVzIHRyaXMgbmUgc29udCBxdWUgdGVtcG9yYWlyZXMgZXQgbidhZmZlY3RlbnQgZG9uYyBxdWUgbCdhZmZpY2hhZ2UuIFBvdXIgcXUnaWxzIHNvaWVudCBwZXJtYW5lbnRzIChyZW51bcOpcm90YXRpb24gZGVzIGxpZ25lcyk6IGBUcmllciAtPiBSZXRyaWVyIGxlcyBsaWduZXMgZGUgZmHDp29uIHBlcm1hbmVudGVgKi4gIA0KLSBJbCBlc3QgcG9zc2libGUgZGUgc3VwcHJpbWVyIGV0IGQnaW52ZXJzZXIgbGUgdHJpIMOgIHBhcnRpciBkZXMgb3B0aW9ucyBzdXIgY2hhcXVlIGNvbG9ubmUgb3UgZ3LDomNlIMOgIGxhIGZvbmN0aW9uIGBUcmllcmAgZHUgaGF1dC4gIA0KDQogKkxlIHRyaSBwZXJtYW5lbnQgYWZmZWN0ZSB0b3V0IGxlIGZpY2hpZXIsIHBhcyBzZXVsZW1lbnQgbGEgdnVlIGZpbHRyw6llLiAgDQoNCiFbXShpbWFnZXMvT1I2LmpwZykgDQoNCiMjIEV4ZXJjaWNlDQoNCjxkaXYgY2xhc3MgPSAiYm94MSI+DQotIFRyaWVyIGxlcyB2YWxldXJzIGRlIGxhIGNvbG9ubmUgYEpvdXIgY2FsZW5kYWlyZWAgZW4gZm9ybWF0IGBkYXRlIGFudMOpY2hyb25vbG9naXF1ZWAuICANCi0gUXVlbGxlIGVzdCBsYSBkZXJuacOocmUgZGF0ZSBkJ2luY2lkZW50IGVucmVnaXN0csOpZSBkYW5zIGxlIGZpY2hpZXIgPyAgDQotIFN1cHByaW1lciBsZSB0cmkuICANCjwvZGl2Pg0KPC9icj4NCg0KPGRpdiBjbGFzcyA9ICJib3gxIj4NCi0gVHJpZXIgbGVzIHZhbGV1cnMgZGVzIGNlbGx1bGVzIGNvbW1lIHRleHRlIGRlIGxhIGNvbG9ubmUgYE1vaXMgQ2FsZW5kcmllcmAgLiAgIA0KLSBUcmllciBsZXMgdmFsZXVycyBkZXMgY2VsbHVsZXMgY29tbWUgdGV4dGUgZGUgbGEgY29sb25uZSBgSm91ciBkdSBtb2lzYC4gIA0KLSBFeHBsb3JlciBsZSByw6lzdWx0YXQuLi4gICANCi0gU3VwcHJpbWVyIGxlIHRyaSBldCByZWNvbW1lbmNlciBsYSBwcm9jw6lkdXJlIGF2ZWMgdW4gdHJpIGRlIGZvcm1hdCBub21icmUuICANCjwvZGl2Pg0KDQo8L2JyPg0KDQoqKioNCg0KDQojIyA2LjQuIEZpbHRyZXIgbGUgdGV4dGUNCg0KLSBMYSBmb25jdGlvbiBgRmlsdHJlciBsZSB0ZXh0ZWAgcGVybWV0IGRlIGNoZXJjaGVyIHVuZSBvdSBkZXMgY2hhaW5lcyBkZSBjYXJhY3TDqHJlcyBkYW5zIHVuZSBvdSBwbHVzaWV1cnMgdmFyaWFibGVzLiAgDQotIFBlcm1ldCBkZSByZWNoZXJjaGVyIGRlcyBjaGFpbmVzIGRlIGNhcmFjdMOocmVzIGRhbnMgdW5lIGNvbG9ubmUgZXQgZGUgY29tYmluZXIgZGVzIGZpbHRyZXMgYXBwbGlxdcOpcyBzdXIgcGx1c2lldXJzIGNvbG9ubmVzIHBvdXIgcmFmZmluZXIgbGEgcmVjaGVyY2hlLiAgDQotIEZvbmN0aW9uIHBsdXMgZXhww6lkaXRpdmUgcXVlIGxlcyBmYWNldHRlcyBxdWFuZCBvbiBuZSB2ZXV0IHF1ZSBjaGVyY2hlciB1bmUgY2hhaW5lIGRlIGNhcmFjdMOocmVzLiAgDQotIEwnYWZmaWNoYWdlIGRlcyBsaWduZXMgc2UgbGltaXRlcmEgYXUgbm9tYnJlIGRlIGNhcyBjb3JyZXNwb25kYW50cyBhdXggY3JpdMOocmVzIGRlIHJlY2hlcmNoZSBpbnNjcml0cyBkYW5zIGxlcyBib2l0ZXMgZGUgZmlsdHJlcy4gIA0KLSAqKlRhbnQgcXVlIGxlcyBmaWx0cmVzIHNlcm9udCBhY3RpZnMsIGxlcyBhY3Rpb25zIHN1YnPDqXF1ZW50ZXMgc2UgbGltaXRlcm9udCDDoCBjZXMgY2FzIGZpbHRyw6lzLioqICANCg0KIVtdKGltYWdlcy9PUjcuanBnKSANCg0KIyMgRXhlcmNpY2UNCg0KPGRpdiBjbGFzcyA9ICJib3gxIj4NCg0KKipMaW1pdGVyIGxhIGxpc3RlIGF1eCBjYXMgc3VydmVudXMgw6AgbGEgc3RhdGlvbiBCZXJyaSBlbnRyZSBtaWRpIGV0IDEzaC4qKiAgDQoNCi0gRmlsdHJlciBsZSB0ZXh0ZSBzdXIgbGEgY29sb25uZSAqQ29kZSBkZSBsaWV1KjogImJlcnJpIiAgDQotIEZpbHRyZXIgbGUgdGV4dGUgc3VyIGxhIGNvbG9ubmUgKkhldXJlIGRlIGwnaW5jaWRlbnQqOiAiMTIiICANCi0gRXhwbG9yZXIgbGVzIHLDqXN1bHRhdHMgIA0KLSBDb21tZW50IHMnYXNzdXJlciBkJ2F2b2lyIHNldWxlbWVudCBsZXMgY2FzIHN1cnZlbnVzIGVudHJlIDEyaCBldCAxM2g/IENvbWJpZW4gZGUgbGlnbmVzIGNvcnJlc3BvbmRlbnQgw6AgY2VzIGNvbmRpdGlvbnM/XlsxMjogb3UgZXhwcmVzc2lvbiByYXRpb25uZWxsZSBeMTIgLyA0OCBjYXNdICANCi0gU3VwcHJpbWVyIHRvdXMgbGVzIGZpbHRyZXMuDQo8L2Rpdj4NCg0KPC9icj4NCg0KKioqDQoNCg0KIyA3LiBMZXMgZmFjZXR0ZXMNCg0KIyMgNy4xIENhcmFjdMOpcmlzdGlxdWVzDQoNCjxkaXYgY2xhc3MgPSAicmlnaHQiPg0KPGltZyBzcmM9ImltYWdlcy9PUjM0LmpwZyIgIHdpZHRoPSI2MCUiIC8+DQo8L2Rpdj4NCg0KLSBMZXMgZmFjZXR0ZXMgY29uc3RpdHVlbnQgbGEgbWFycXVlIGRlIGNvbW1lcmNlIGQnT3BlblJlZmluZSwgZCdvw7kgbGUgbG9nbyEgDQoNCi0gRm9uY3Rpb25uYWxpdMOpIHB1aXNzYW50ZSBxdWkgcGVybWV0IGQnZXhwbG9yZXIgZXQgZGUgZmlsdHJlciBzZXMgZG9ubsOpZXMgZW4gZm9uY3Rpb24gZGUgZGlmZsOpcmVudGVzIGNvbmRpdGlvbnMuICANCg0KLSBOJ2FmZmVjdGVudCBwYXMgZGlyZWN0ZW1lbnQgbGVzIGRvbm7DqWVzLCBzZXVsZW1lbnQgbGEgcHLDqXNlbnRhdGlvbi4gIA0KDQotIMOAIGxhIGJhc2UsIHVuZSBmYWNldHRlIGNvcnJlc3BvbmQgw6AgbGEgbGlzdGUgZGVzIHZhbGV1cnMgcG9zc2libGVzIGQndW5lIHZhcmlhYmxlICAoZXQgZGUgbGV1ciBvY2N1cnJlbmNlKSBwcsOpc2VudMOpZSBzZWxvbiBsZSBmb3JtYXQgKGNoYWluZSwgbnVtw6lyaXF1ZSwgZGF0ZSkuICANCg0KLSBQZXJtZXR0ZW50IHVuZSBleHBsb3JhdGlvbiBldCBtYW5pcHVsYXRpb24gZGVzIHZhbGV1cnMgcG9zc2libGVzIGV0IGRlIGxldXJzIGNhcyBjb3JyZXNwb25kYW50cyBwbHVzIMOpbGFib3LDqWVzIHF1ZSBsZXMgZmlsdHJlcy4gIA0KDQotIE9uIHBldXQgYWluc2kgaWRlbnRpZmllciBsZXMgdGVuZGFuY2VzLCBsZXMgcsOpZ3VsYXJpdMOpcywgbGVzIGVycmV1cnMsIGxlcyDDqWNhcnRzLCBsZXMgcsOpcMOpdGl0aW9ucyBldCAgY2libGVyIGxlcyB2YWxldXJzIGRlIHNvdXMtZ3JvdXBlcyBwcsOpY2lzLiAgDQoNCi0gQ2VzIHNvdXMtZ3JvdXBlcyBwZXV2ZW50IGVuc3VpdGUgw6p0cmUgw6lkaXTDqXMgZXQgZXhwb3J0w6lzIChib3V0b24gYEV4cG9ydGVyYCBlbiBoYXV0IMOgIGRyb2l0ZSkuIA0KDQo8L2JyPg0KDQojIyMgRGV1eCB0eXBlcyBkZSBmYWNldHRlczoNCg0KICAtIExlcyBmYWNldHRlcyBhdXRvbWF0aXPDqWVzICoqWzFdKiouICAgDQogIDwvYnI+DQogIC0gTGVzIGZhY2V0dGVzIHBlcnNvbm5hbGlzw6llcyAqKlsyXSoqLiAgDQogIDwvYnI+DQogICAgLSBJbCBlc3QgYXVzc2kgcG9zc2libGUgZGUgY3LDqWVyIHNlcyBwcm9wcmVzIGZhY2V0dGVzIGdyw6JjZSBhdSBsYW5nYWdlIEdSRUwgcG91ciBkw6lmaW5pciBkZXMgY29uZGl0aW9ucyBkZSBzw6lsZWN0aW9uL2ZpbHRyZSB0csOocyBwcsOpY2lzZXMgKipbM10qKiAob24gcGFybGUgZW5jb3JlIGljaSBkZSAqZmFjZXR0ZXMgcGVyc29ubmFsaXPDqWVzKiwgbWFpcyBlbGxlcyBkb2l2ZW50IMOqdHJlIHLDqWRpZ8OpZXMgbWFudWVsbGVtZW50KS4NCg0KPC9icj4NCg0KPGNlbnRlcj4gIA0KDQohW10oaW1hZ2VzL09SMjMuanBnKQ0KPC9jZW50ZXI+ICANCg0KICAtICoqWzhdKiogTGUgbGllbiBgY2hhbmdlcmAgcGVybWV0IGQnb3V2cmlyIHVuZSAqKmZlbsOqdHJlIGQnw6lkaXRpb24gR1JFTCoqIHBvdXIgbW9kaWZpZXIgbGEgc3ludGF4ZSBkZSBsYSBmYWNldHRlLiAgDQogIC0gKipbOV0qKiBQb3VyIHN1cHByaW1lciBsZXMgZmFjZXR0ZXMsIGNsaXF1ZXIgc3VyIGxlIHggZGUgY2hhcXVlIGZlbsOqdHJlIG91IGBUb3V0IHN1cHByaW1lcmAuICANCiAgLSBQb3VyIGNvbnNlcnZlciBsZXMgZmVuw6p0cmVzIG1haXMgc3VwcHJpbWVyIGxlcyBzw6lsZWN0aW9ucyBxdWkgeSBvbnQgw6l0w6kgZmFpdGVzLCBjbGlxdWVyIHN1ciBgcsOpaW50aWFsaXNlcmAgc3VyIGNoYXF1ZSBmZW7DqnRyZSBvdSBgVG91dCByw6lpbml0aWFsaXNlcmAgKipbOV0qKi4gIA0KICAtICoqWzEwXSoqIE9wdGlvbiBgR3JvdXBlYDogT3V0aWxzIHByb3Bvc2FudCBkaWZmw6lyZW50cyBhbGdvcml0aG1lcyBkZSBzaW1pbGFyaXTDqSBwZXJtZXR0YW50IGRlIHJlZ3JvdXBlciBkZXMgY2F0w6lnb3JpZXMgc2VtYmxhYmxlcy4gIA0KDQoNCiMjIyBUcm9pcyBmb3JtYXRzIGRlIGZhY2V0dGVzOg0KDQpPbiByZXRyb3V2ZSDDqWdhbGVtZW50IGRpZmbDqXJlbnRzICoqZm9ybWF0cyBkZSBmYWNldHRlcyoqIC0+IHVuZSBwb3VyIGNoYXF1ZSBmb3JtYXQgZGUgZG9ubsOpZXMgKExlcyBmYWNldHRlcyBwZXJzb25uYWxpc8OpZXMgcHJvcG9zZW50IGF1c3NpIGRlcyBmYWNldHRlcyBib29sw6llbm5lcykuICAgDQoNCg0KIyMjIyAxLiBGYWNldHRlIHRleHR1ZWxsZSAqKls0LTVdKiogDQoNCi0gVHlwZSBkZSBmYWNldHRlIGxlIHBsdXMgc291dmVudCB1dGlsaXPDqS4gICANCi0gUmVncm91cGVudCBkYW5zIGxhIGZlbsOqdHJlIGRlIGdhdWNoZSBsZXMgdmFsZXVycyBkaXN0aW5jdGVzICh0ZXh0dWVsbGVzIG91IG51bcOpcmlxdWVzKSBkZXMgY29sb25uZXMgdm91bHVlcy4gICANCiAgLSBPbiBwZXV0IGZhaXJlIHVuZSBmYWNldHRlIHRleHR1ZWxsZSBzdXIgdW5lIGNvbG9ubmUgbnVtw6lyaXF1ZSBtYWlzIHBhcyBsJ2ludmVyc2UuICANCiAgLSAyMDAwIHZhbGV1cnMgbWF4aW11bSBwYXIgZMOpZmF1dCBtYWlzIHBldXQgw6p0cmUgbW9kaWZpw6kgZGFucyBsZXMgcHLDqWbDqXJlbmNlcy4gU2kgbGVzIHZhbGV1cnMgc29udCB0cm9wIG5vbWJyZXVzZXMsIGVsbGVzIG5lIHNlcm9udCBwYXMgbGlzdMOpZXMgKHVuIGZpbHRyZSBwb3VycmFpdCDDqnRyZSB1dGlsaXPDqSkuIA0KLSBQZXJtZXR0ZW50IGRlIGNvbWJpbmVyIGRpZmbDqXJlbnRzIGZpbHRyZXMgZW4gc8OpbGVjdGlvbm5hbnQgZGlmZsOpcmVudGVzIHZhbGV1cnMgZCd1bmUgb3UgcGx1c2lldXJzIHZhcmlhYmxlcyAoZXQgbGV1cnMgY2FzIGNvcnJlc3BvbmRhbnRzKS4gICANCiAgLSBDbGlxdWVyIGBpbmNsdXJlYCBvdSBgZXhjbHVyZWAgcG91ciBzw6lsZWN0aW9ubmVyIG91IHN1cHByaW1lciBkZXMgY2hvaXggbXVsdGlwbGVzICoqWzEyXSoqLiAgIA0KICAtIFVuZSBmb2lzIGxhIHPDqWxlY3Rpb24gZmFpdGUsIGwnb3B0aW9uIGBpbnZlcnNlcmAgcGVybWV0IGRlIHPDqWxlY3Rpb25uZXIgdG91dCBTQVVGIGxhIHPDqWxlY3Rpb24gKipbMTFdKiouICAgDQogIC0gUGV1dmVudCDDqnRyZSB0cmnDqWVzIHNlbG9uIGxlIG5vbSBvdSBsZSBjb21wdGUgKG5vbWJyZSBkJ29jY3VycmVuY2VzKS4gICANCi0gUGVybWV0dGVudCAqKmTigJnDqWRpdGVyIGxlcyB2YWxldXJzKiogKGNvbnRlbnUgZGUgY2hhcXVlIGNlbGx1bGUgY29ycmVzcG9uZGFudGUpICoqWzEzXSoqLiAgDQoNCg0KIyMjIyAyLiBGYWNldHRlIG51bcOpcmlxdWUgKipbN10qKg0KDQotIFZpc3VhbGlzZXIgZXQgc8OpbGVjdGlvbm5lciBsZXMgdmFsZXVycyBk4oCZdW5lIHZhcmlhYmxlIG51bcOpcmlxdWUgYWxsYW50IGRlIGxhIHBsdXMgcGV0aXRlIMOgIGxhIHBsdXMgZ3JhbmRlLiAgDQoNCg0KIyMjIyAzLiBGYWNldHRlIGNocm9ub2xvZ2lxdWUgKipbNl0qKg0KDQotIFZpc3VhbGlzZXIgZXQgc8OpbGVjdGlvbm5lciBsZXMgdmFsZXVycyBk4oCZdW5lIGNvbG9ubmUgZGF0ZSBlbiBsaWduZSBkdSB0ZW1wcy4gIA0KDQoNCjwvYnI+DQoNCiMjIEV4ZXJjaWNlDQoNCjxkaXYgY2xhc3MgPSAiYm94MSI+DQoNCioqRmlsdHJlcioqIA0KDQotIEV4cGxvcmVyIGxlcyB2YWxldXJzIGRlIGxhIHZhcmlhYmxlICpDYXVzZSBwcmltYWlyZSouIFF1ZWxsZSBlc3QgbGEgZGV1eGnDqG1lIHBsdXMgZnLDqXF1ZW50ZT8gDQotIFF1ZWxsZXMgc29udCBsZXMgY2F0w6lnb3JpZXMgZGUgKkNhdXNlIHNlY29uZGFpcmUqIHJlbGnDqWVzIMOgIGxhICpDYXVzZSBwcmltYWlyZSAiQ2xpZW50w6hsZSIqPyAgIA0KLSBRdWVsbGUgZXN0IGxhIHBsdXMgZnLDqXF1ZW50ZT8gU8OpbGVjdGlvbm5lciBjZXR0ZSB2YWxldXIuIENvbWJpZW4gZGUgY2FzIGNvcnJlc3BvbmRlbnQgw6AgY2V0dGUgc8OpbGVjdGlvbj8gIA0KLSDDgCBxdWVsICpqb3VyIGRlIGxhIHNlbWFpbmUqIGNldHRlIGNhdXNlIGVzdC1lbGxlIHN1cnZlbnVlIGxlIHBsdXMgc291dmVudD9eW0NsaWVudMOobGUgLyBCbGVzc8OpZSBvdSBtYWxhZGUsIE3DqWZhaXQgdm9sb250YWlyZSwgTnVpc2FuY2UgaW52b2xvbnRhaXJlIC8gTcOpZmFpdCB2b2xvbnRhaXJlIDc4MS8gNV0gICANCi0gUsOpaW5pdGlhbGlzZXIgdG91dGVzIGxlcyBmYWNldHRlcy4NCg0KLSBFeHBsb3JlciBsZXMgZmFjZXR0ZXMgcGVyc29ubmFsaXPDqWVzICpQYXIgbW90KiBldCAqZG91YmxvbnMqIHN1ciBsYSBjb2xvbm5lICpDYXVzZSBwcmltYWlyZSouDQoNCioqw4lkaXRlcioqICANCg0KLSBEYW5zIGxhIGZhY2V0dGUgKkNhdXNlIHByaW1haXJlKiwgcmVub21tZXIgbGEgdmFsZXVyICJhdXRyZSIgcG91ciBxdSdlbGxlIHNvaXQgZnVzaW9ubsOpZSDDoCBsYSB2YWxldXIgIkF1dHJlcyIuICANCi0gU3VwcHJpbWVyIHRvdXRlcyBsZXMgZmFjZXR0ZXMuDQo8L2Rpdj4NCg0KPC9icj4NCg0KDQo8ZGl2IGNsYXNzID0gImJveDEiPg0KKipGaWx0cmVyKiogDQoNCi0gUXVlbCBlc3QgbGUgKnN5bXB0b21lKiBsZSBwbHVzIGZyw6lxdWVudD8gU8OpbGVjdGlvbm5lciBjZXR0ZSB2YWxldXIuICANCi0gQ2VzIMOpdsOpbmVtZW50cyBvbnQtaWxzIG7DqWNlc3NpdMOpIHVuZSAqw6l2YWN1YXRpb24qP15bQ2xpZW50w6hsZSAvIExpZ25lIG9yYW5nZSAvIE91aSAxN10gICAgIA0KDQoqKsOJZGl0ZXIqKiAgDQoNCi0gw4lkaXRlciBsYSB2YXJpYWJsZSAqw6l2YWN1YXRpb24qIGRlIGZhw6dvbiDDoCBjZSBxdSdpbCBuJ3kgYWl0IHF1ZSAqKmRldXggdmFsZXVycyoqIHBvc3NpYmxlczogT3VpIGV0IE5vbi4gICAgDQoNCjwvZGl2Pg0KDQoqKioNCg0KDQojIyA3LjIuIExlcyByZWdyb3VwZW1lbnRzIChjbHVzdGVyaW5nKQ0KDQotIEZvbmN0aW9uIHF1aSBwZXJtZXQgZCdpZGVudGlmaWVyIGRhbnMgdW5lIGNvbG9ubmUgbGVzIHZhbGV1cnMgZGlzdGluY3RlcyBxdWkgcG91cnJhaWVudCBhdm9pciBsYSBtw6ptZSBzaWduaWZpY2F0aW9uIG91IHF1aSBwb3VycmFpZW50IMOqdHJlIHJlZ3JvdXDDqWVzIGRhbnMgdW5lIG3Dqm1lIGNhdMOpZ29yaWUgPSAidmFyaWF0aW9ucyBzdXIgbGUgbcOqbWUgdGjDqG1lIiDDqXZhbHXDqWVzIGVuIGZvbmN0aW9uIGRlIFtkaWZmw6lyZW50cyBhbGdvcml0aG1lc10oaHR0cHM6Ly9naXRodWIuY29tL09wZW5SZWZpbmUvT3BlblJlZmluZS93aWtpL0NsdXN0ZXJpbmctSW4tRGVwdGgpLiANCg0KLSBDaGFxdWUgc3VnZ2VzdGlvbiBkb2l0IMOqdHJlIGFwcHJvdXbDqWUgaW5kaXZpZHVlbGxlbWVudCBwb3VyIHF1ZSBsZXMgbW9kaWZpY2F0aW9ucyBzJ2FwcGxpcXVlbnQgKGxlcyByZWdyb3VwZW1lbnRzIHByb3Bvc8OpcyBuZSBzb250IHBhcyBuw6ljZXNzYWlyZW1lbnQgcGVydGluZW50cykuDQoNCi0gT3BlblJlZmluZSBwcm9wb3NlIGRlcyAqY2x1c3RlcnMqIHNlbG9uIGRpZmbDqXJlbnRlcyBtw6l0aG9kZXMgcGx1cyBvdSBtb2lucyDDqWxhYm9yw6llcyAoKlByb2NoZSB2b2lzaW4qIHByZW5kIHBsdXMgZGUgbcOpbW9pcmUpIHF1aSBwZXJtZXR0ZW50IGRlIHJlZ3JvdXBlciBsZXMgdmFsZXVycyBzaW1pbGFpcmVzIGV0IHByb3Bvc2VudCBkZXMgbWF0Y2hzIHBvc3NpYmxlcyAoKmZ1enp5IG1hdGNoaW5nKik6IHBhciBleGVtcGxlICplbXByZWludGUqIGVzdCBwbHVzIGNvbnNlcnZhdGV1ciAoZGlzdGluZ3VlIGNhc3NlLCBlc3BhY2VzLCBvcmRyZSwgcsOpcMOpdGl0aW9uLCBwb25jdHVhdGlvbi4uLiksICpuZ3JhbSogZXN0IHBsdXMgZmxleGlibGUgKG3Dqm1lcyBjYXJhY3TDqHJlcyksICpNZXRhcGhvbmUzKiBlc3QgbGUgcGx1cyAibGliw6lyYWwiIChtw6ptZSBwcm9ub25jaWF0aW9uKS4NCg0KIyMgRXhlcmNpY2UNCg0KPGRpdiBjbGFzcyA9ICJib3gxIj4NCi0gQ3LDqWVyIHVuZSBmYWNldHRlIHRleHR1ZWxsZSBzdXIgbGEgY29sb25uZSAqQ29kZSBkZSBsaWV1Ki4gIA0KLSBDbGlxdWVyIHN1ciBgR3JvdXBlYCBldCBleHBsb3JlciBsZXMgcmVncm91cGVtZW50cyBlbiBmb25jdGlvbiBkZXMgZGlmZsOpcmVudHMgYWxnb3JpdGhtZXMuICANCjwvZGl2Pg0KDQoqKioNCg0KDQojIyA3LjMuIExlcyBmYWNldHRlcyBwZXJzb25uYWxpc8OpZXMgDQoNCg0KLSBGb25jdGlvbm5lbnQgY29tbWUgZGVzIGZhY2V0dGVzIGF1dG9tYXRpc8OpZXMgc2F1ZiBxdSdvbiBuZSBwZXV0IMOpZGl0ZXIgZW4gZm9uY3Rpb24gZGUgY2VzIHLDqXN1bHRhdHMgY2FyIGVsbGVzIHByw6lzZW50ZW50IGRlcyBkb25uw6llcyBtb2RpZmnDqWVzIGVuIG3DqW1vaXJlLg0KDQotIE9udCDDqXTDqSBkw6l2ZWxvcHDDqWVzIGV0IGF1dG9tYXRpc8OpZXMgYWZpbiBkJ2V4cGxvcmVyIGRlcyBhc3BlY3RzIHByw6ljaXMgZGVzIGRvbm7DqWVzIHNhbnMgYXZvaXIgw6AgbGVzICByw6lkaWdlciBlbiBzeW50YXhlIEdSRUw6IA0KDQogIC0gYEZhY2V0dGUgcGFyIG1vdGAgOiBEaXZpc2UgY2hhcXVlIG1vdCAoc8OpcGFyw6kgZCd1biBlc3BhY2UpIGQndW5lIGNvbG9ubmUgZXQgbGVzIHByw6lzZW50ZSBlbiBsaXN0ZSBkZSB2YWxldXJzIGRpc3RpbmN0ZXMgW3ZhbHVlLnNwbGl0KCIgIildLg0KICANCiAgLSBgRmFjZXR0ZSBkb3VibG9uc2A6IHZhbGV1cnMgYm9vbMOpZW5uZXMgaW5kaXF1YW50IHNpIGxlcyB2YWxldXJzIHNvbnQgdW5pcXVlcyAoZmFsc2UpIG91IG5vbiAodHJ1ZSkgW2ZhY2V0Q291bnQodmFsdWUsICd2YWx1ZScsICdTeW1wdG9tZScpID4gMV0uICANCiAgDQogIC0gYEZhY2V0dGVzIGxvZ2FyaXRobWlxdWVzYDogbW9kaWZpY2F0aW9uIGxvZ2FyaXRobWlxdWUgZGUgdmFsZXVycyBudW3DqXJpcXVlcyBbdmFsdWUubG9nKCldLg0KICANCiAgLSBgRmFjZXR0ZSBsb25ndWV1ciBkZSB0ZXh0ZWA6IGxpc3RlIGxlIG5vbWJyZSBkZSBjYXJhY3TDqHJlcyBkdSBjb250ZW51IGRlcyBjZWxsdWxlcyBkJ3VuZSBjb2xvbm5lIFt2YWx1ZS5sZW5ndGgoKV0uDQogIA0KICAtIEZhY2V0dGVzIHBlcm1ldHRhbnQgZCdleHBsb3JlciBsZXMgdmFsZXVycyBkJ2BlcnJldXJgLCBgbnVsbGVzYCwgYHZpZGVzYC4uLiBbaXNFbXB0eVN0cmluZyh2YWx1ZSldDQoNCioqKiANCg0KIyA4LiAgVHJhbnNmb3JtYXRpb25zDQoNCi0gT3BlblJlZmluZSBwZXJtZXQgZCdleHBsb3JlciBtYWlzIGF1c3NpIGRlIG1vZGlmaWVyIHNlcyBkb25uw6llcyBzYW5zIGF2b2lyIMOgIHRvdWNoZXIgYXUgY29udGVudSBkZSBjZWxsdWxlcyBtYW51ZWxsZW1lbnQuICANCg0KLSBDb21tZSBwb3VyIGxlcyBmYWNldHRlcywgbGVzIGZvbmN0aW9ucyBkZSB0cmFuc2Zvcm1hdGlvbiBwZXV2ZW50IHNlIGZhaXJlIGRlIGRldXggZmHDp29uczogICAgDQoNCiAgMS4gVHJhbnNmb3JtYXRpb25zIGF1dG9tYXRpc8OpZXMgKGBUcmFuc2Zvcm1hdGlvbnMgY291cmFudGVzYCkgKipbMl0qKjogZm9uY3Rpb25zIHBlcm1ldHRhbnQgZCdhcHBsaXF1ZXIgZGVzIG1vZGlmaWNhdGlvbnMgY291cmFudGVzIHN1ciBsZSBmb3JtYXQgZXQgbGEgc3RydWN0dXJlIGRlcyBjZWxsdWxlcy9jb2xvbm5lcy4gIA0KICANCiAgMi4gVHJhbnNmb3JtYXRpb25zIG1hbnVlbGxlcyBkYW5zIGxhIGZlbsOqdHJlIEdSRUwgKipbMV0qKiBhZmluIGQnYWxsZXIgYmVhdWNvdXAgcGx1cyBsb2luLiAgDQogIA0KDQohW10oaW1hZ2VzL09SMjQuanBnKQ0KDQo8L2JyPg0KDQo8ZGl2IGNsYXNzID0gIm5vdGUiPg0KUG91ciB2b2lyIGxhIHN5bnRheGUgY29ycmVzcG9uZGFudCDDoCBjaGFxdWUgZm9uY3Rpb24gZGUgYHRyYW5zZm9ybWF0aW9ucyBjb3VyYW50ZXNgLCBhcHBsaXF1ZXIgbGEgZm9uY3Rpb24gc3VyIHVuZSBjb2xvbm5lIHB1aXMgYWxsZXIgdm9pciBsJ2hpc3RvcmlxdWUuIFBhciBleGVtcGxlOiBgdmFsdWUudG9OdW1iZXIoKWAsIGB2YWx1ZS50b1RpdGxlY2FzZSgpYCwgYHZhbHVlLnRvTnVtYmVyKClgLCBgdmFsdWUudG9VcHBlcmNhc2UoKWAsIGB2YWx1ZS50cmltKClgLi4uIDwvZGl2Pg0KDQoqKiogDQoNCg0KIyMgOC4xLiBEaXZpc2VyIGxlIGNvbnRlbnUgZGUgY2VsbHVsZXMgbXVsdGl2YXJpw6llcw0KDQotICoqRGV1eCBvcHRpb25zOiAqKiAgDQogIDEuIEVuIGRpdmlzYW50IGxlIGNvbnRlbnUgZGVzIGNlbGx1bGVzIGVuICoqcGx1c2lldXJzIGNvbG9ubmVzKio6IGDDiWRpdGVyIGxhIGNvbG9ubmUgLT4gRGl2aXNlciBlbiBwbHVzaWV1cnMgY29sb25uZXNgICANCiAgMi4gRW4gZGl2aXNhbnQgbGUgY29udGVudSBzdXIgKipwbHVzaWV1cnMgbGlnbmVzKio6IGDDiWRpdGVyIGxlcyBjZWxsdWxlcyAtPiBEaXZpc2VyIGxlcyBjZWxsdWxlcyBtdWx0aXZhcmnDqWVzYCAgDQoNCjwvYnI+DQoNCiFbXShpbWFnZXMvT1IzNy5qcGcpICANCg0KLSBMYSBwcmVtacOocmUgb3B0aW9uIGVzdCBsYSBwbHVzIGZyw6lxdWVudGUuIA0KLSBMYSBkZXV4acOobWUgb3B0aW9uIGF1cmEgdW4gZWZmZXQgaW1wb3J0YW50IHN1ciBsYSBzdHJ1Y3R1cmUgZGVzIG9ic2VydmF0aW9ucyBwdWlzcXUnZWxsZSBtdWx0aXBsaWVyYSBsZSBub21icmUgZGUgbGlnbmVzIHBhciBjYXMgKGNlIHF1aSBuw6ljZXNzaXRlcmEgZGUgcGFzc2VyIMOgIGxhIHZ1ZSBwYXIgYGVudHLDqWVzYCkuDQoNCiMjIEV4ZXJjaWNlDQoNCjxkaXYgY2xhc3MgPSAiYm94MiI+DQpUcmFuc2Zvcm1lciBsYSB2YXJpYWJsZSAqTGlnbmUqDQo8L2Rpdj4NCjxkaXYgY2xhc3MgPSAiYm94MSI+DQoqKlVuaWZvcm1pc2VyIGxlIG5vbSBkZXMgbGlnbmVzOioqICANCg0KLSBDcsOpZXIgdW5lIGZhY2V0dGUgc3VyIGxhIGNvbG9ubmUgTGlnbmUuIA0KDQotIERldXggcHJvYmzDqG1lcyBzZSBwb3NlbnQ6IDEpIGxlcyBub21zIGRlIGxpZ25lcyBub24gdW5pZm9ybWVzIGV0IDIpIGxlcyB2YWxldXJzIG11bHRpcGxlcy4gIA0KDQotIE5vdXMgY2hvaXNpc3NvbnMgZCd1bmlmb3JtaXNlciBsZXMgdmFsZXVycyBlbiB1dGlsaXNhbnQgbGVzIG51bcOpcm9zIGRlIGxpZ25lcyBldCBlbiBzdXBwcmltYW50IGxlIG1vdCBMaWduZS4gIA0KDQotIEV4cGxvcmVyIGV0IGFjY2VwdGVyIGxlcyByZWdyb3VwZW1lbnRzIHByb3Bvc8OpcyBhdmVjIGxhIGZvbmN0aW9uIGBHcm91cGVgLiAgDQoNCi0gU3VwcHJpbWVyIGxlIG1vdCBsaWduZTogIA0KDQogIC0gYMOJZGl0ZXIgbGVzIGNlbGx1bGVzIC0+IHJlbXBsYWNlcmAgLT4gIkxpZ25lIiBwYXI6IG5lIHJpZW4gc2Fpc2lyIGRhbnMgbCdlbmNhZHLDqS4gICAgDQoNCg0KLSBDbGlxdWVyIGVuc3VpdGUgZGlyZWN0ZW1lbnQgc3VyIGBlZGl0YCBzdXIgdW5lIGNlbGx1bGUgZGUgbGEgY29sb25uZSBkZSAqTGlnbmUqIC0+IHJlbWFycXVlciBsYSBwcsOpc2VuY2UgZCd1biBlc3BhY2UsIHN1cHByaW1lciBsJ2VzcGFjZSBldCBmZXJtZXIuIA0KDQotIFJhZnJhaWNoaXIgbGEgZmFjZXR0ZSBldCBvYnNlcnZlciBsJ2ltcGFjdC4gDQoNCi0gUmVtYXJxdWVyIGwnaW1wYWN0IGRlIGwnZXNwYWNlIGRhbnMgbGEgZmFjZXR0ZS4gQ2VzIGVzcGFjZXMgcGV1dmVudCDDqnRyZSBzdXBwcmltw6lzIGdyw6JjZSDDoCBsYSBmb25jdGlvbjogYMOJZGl0ZXIgbGVzIGNlbGx1bGVzIC0+IFRyYW5zZm9ybWF0aW9ucyBjb3VyYW50ZXMgLT4gU3VwcHJpbWVyIGxlcyBlc3BhY2VzIGRlIGTDqWJ1dCBldCBkZSBmaW5gLiANCi0gUmVtcGxhY2VyIGxlcyBjb3VsZXVycyBkZSBsaWduZSBwYXIgbGV1ciBudW3DqXJvIGRpcmVjdGVtZW50IGRhbnMgbGEgZmFjZXR0ZS4gICANCjwvZGl2Pg0KDQoNCg0KPGRpdiBjbGFzcyA9ICJib3gxIj4NCioqRGl2aXNlciBsZSBjb250ZW51IGRlcyBjZWxsdWxlcyBlbiBjcsOpYW50IGRlcyBjb2xvbm5lcyBhdmVjIHVuZSBzZXVsZSB2YWxldXIgICoqDQoNCi0gRGFucyBsYSBmYWNldHRlLCByZW1wbGFjZXIgbGVzICItIiBwYXIgZGVzICIsIi4gICAgDQoNCi0gYMOJZGl0ZXIgbGEgY29sb25uZSAtPiBEaXZpc2VyIGVuIHBsdXNpZXVycyBjb2xvbm5lc2A6DQogIC0gRMOpZmluaXIgbGUgc8OpcGFyYXRldXIgIiwiIChjZWx1aS1jaSBkaXNwYXJhaXRyYSkuICANCiAgLSBEw6ljb2NoZXIgbGVzIG9wdGlvbnMgIkRldmluZXIiIGV0ICJTdXBwcmltZXIiLiAgDQotIExlcyBub3V2ZWxsZXMgY29sb25uZXMgcmVwcmVuZHJvbnQgbGUgbm9tIGRlIGwnb3JpZ2luYWwgbnVtw6lyb3TDqS4gTGVzIHJlbm9tbWVyOiBwcmVtaWVyZSwgZGV1eGllbWUsIHRyb2lzaWVtZSwgcXVhdHJpZW1lLiAgDQo8L2Rpdj4NCg0KPC9icj4NCg0KPGRpdiBjbGFzcyA9ICJib3gyIj4NCkRpdmlzZXIgcGFyIGxlcyBsb25ndWV1cnMgZGUgY2hhbXBzIGxhIGNvbG9ubmUgYE51bcOpcm8gZCdpbmNpZGVudGAgcG91ciBlbiBjcsOpZXIgZGV1eCBub3V2ZWxsZXM6ICANCiAgMS4gVW5lIGNvbG9ubmUgY29udGVuYW50IGxlIHByZW1pZXIgY2FyYWN0w6hyZSBpbmRpcXVhbnQgbGUgdHlwZSBkJ2luY2lkZW50LCBzb2l0IFQgKHRyYWluKSBvdSBTIChzZXJ2aWNlKS4gIA0KICAyLiBVbmUgY29sb25uZSBjb250ZW5hbnQgbCdlbnNlbWJsZSBkZXMgY2FyYWN0w6hyZXMgbnVtw6lyaXF1ZXMgaW5kaXF1YW50IGxlIG51bcOpcm8gZCdpbmNpZGVudC4gIA0KPC9kaXY+DQo8ZGl2IGNsYXNzID0gImJveDEiPg0KKipWw6lyaWZpY2F0aW9ucyBwcsOpYWxhYmxlczoqKg0KICAxLiBWw6lyaWZpZXIgcXUnaWwgbid5IGEgcGFzIGRlIGRvdWJsb24gZGFucyBjZXR0ZSBjb2xvbm5lOiBgRmFjZXR0ZXMgcGVyc29ubmFsaXPDqWVzIC0+IEZhY2V0dGUgZG91YmxvbmAgLT4gUXVlbCBlc3QgbGUgcHJvYmzDqG1lPyAgQ2xpcXVlciBzdXIgYENoYW5nZXJgIGV0IGFuYWx5c2VyIGwnZXhwcmVzc2lvbi4gIA0KICAyLiBWw6lyaWZpZXIgbGEgbG9uZ3VldXIgZGUgY2hhcXVlIGNhczogIGBGYWNldHRlcyBwZXJzb25uYWxpc8OpZXMgLT4gRmFjZXR0ZSBsb25ndWV1ciBkdSB0ZXh0ZWAuICAgIA0KDQoqKkRpdmlzZXIgbGEgY29sb25uZToqKiAgDQotIGDDiWRpdGVyIGxhIGNvbG9ubmUgLT4gRGl2aXNlciBlbiBwbHVzaWV1cnMgY29sb25uZXMgc2Vsb24gbGVzIGxvbmd1ZXVycyBkZSBjaGFtcHNgIDogMSwgOC4gICAgDQotIETDqWNvY2hlciA6IGRldmluZXIgbGUgdHlwZSBkZSBjZWxsdWxlIGV0IFN1cHByaW1lciBjZXR0ZSBjb2xvbm5lLiAgICANCi0gUmVub21tZXIgbGVzIGNvbG9ubmVzIDogVHlwZSBldCBJRC4gICAgDQo8L2Rpdj4NCg0KPC9icj4NCg0KKioqDQoNCiMjIDguMi4gRnVzaW9ubmVyIGxlIGNvbnRlbnUgZGUgcGx1c2lldXJzIGNvbG9ubmVzDQoNCiMjIEV4ZXJjaWNlICAgDQoNCk5vdXMgc291aGFpdG9ucyBjYWxjdWxlciBsYSBkdXLDqWUgZGVzIGluY2lkZW50cyAobsOpY2Vzc2l0ZSBsJ3V0aWxpc2F0aW9uIGRlIEdSRUwpLiBQb3VyIGNlIGZhaXJlIG5vdXMgY3LDqWVyb25zIGRldXggY29sb25uZXMgcG91ciBlbnN1aXRlIGNhbGN1bGVyIGxhIGRpZmbDqXJlbmNlIGVudHJlIGxlcyBkZXV4OiAgICANCi0gVHJhbnNmb3JtYXRpb24gc2ltcGxlIGF1dG9tYXRpc8OpZTogQ3LDqWVyIHVuZSBub3V2ZWxsZSBjb2xvbm5lIGZ1c2lvbm5hbnQgbGVzIGNvbG9ubmVzOiAqQW5uw6llIGNpdmlsZSosICpNb2lzIGNhbGVuZHJpZXIqLCAqam91cnMgZHUgbW9pcyogZXQgKkhldXJlIGRlIGwnaW5jaWRlbnQqLiAgDQotIFRyYW5zZm9ybWF0aW9uIGF2YW5jw6llIEdSRUwgKHBldXQgw6p0cmUgcsOpYWxpc8OpZSBkZSBmYcOnb24gYXV0b21hdGlzw6llKTogQ3LDqWVyIHVuZSBub3V2ZWxsZSBjb2xvbm5lIGZ1c2lvbm5hbnQgbGVzIGNvbG9ubmVzOiAqQW5uw6llIGNpdmlsZSosICpNb2lzIGNhbGVuZHJpZXIqLCAqam91cnMgZHUgbW9pcyogZXQgKkhldXJlIGRlIGwnaW5jaWRlbnQqLiAgDQoNCjwvYnI+DQoNCjxkaXYgY2xhc3MgPSAibm90ZSI+DQpMb3JzcXVlIGwnb24gZnVzaW9ubmUgZGVzIGNvbG9ubmVzLCBpbCBmYXV0IHBvcnRlciB1bmUgYXR0ZW50aW9uIHBhcnRpY3VsacOocmUgYXUgc8OpcGFyYXRldXIgY2hvaXNpLiBOZSBwYXMgdXRpbGlzZXIgdW4gY2FyYWN0w6hyZSBxdWkgcG91cnJhaXQgZmFpcmUgcGFydGllIGR1IGNvbnRlbnUgKGV4OiAsKSBvdSBxdWkgc2VydmlyYSDDoCBkaXZpc2VyIGxlcyBjb2xvbm5lcyAoLmNzdikNCjwvZGl2Pg0KDQo8L2JyPg0KDQoNCjxkaXYgY2xhc3MgPSAiYm94MiI+DQoxLiAqKkZvbmN0aW9uIGF1dG9tYXRpc8OpZSoqIC0+IEZ1c2lvbm5lciBsZXMgY29sb25uZXM6ICpBbm7DqWUgY2l2aWxlKiwgKk1vaXMgY2FsZW5kcmllciosICpqb3VycyBkdSBtb2lzKiBldCAqSGV1cmUgZGUgbCdpbmNpZGVudCoNCjwvZGl2Pg0KDQo8ZGl2IGNsYXNzID0gImJveDEiPg0KLSBBbm7DqWUgY2l2aWxlIC0+IGDDiWRpdGVyIGxhIGNvbG9ubmVgIC0+IGBKb2luZHJlIGxlcyBjb2xvbm5lc2AuICAgIA0KLSBKb2luZHJlIGRlcyBjb2xvbm5lcyAtPiBDb2NoZXIgbGVzIGNvbG9ubmVzIHZvdWx1ZXMgZXQgbGVzIHRyaWVyIHNlbG9uIGwnb3JkcmUgdm91bHUgZGFucyBsYSBub3V2ZWxsZSB2YWxldXIuICANCi0gU8OpcGFyYXRldXIgZW50cmUgbGUgY29udGVudSBkZSBjaGFxdWUgY29sb25uZTogIi0iLiAgICANCi0gw4ljcmlyZSBsZSByw6lzdWx0YXQgZGFucyB1bmUgbm91dmVsbGUgY29sb25uZSBub21tw6llOiAqRGF0ZSouICAgIA0KDQotIFRyYW5zZm9ybWVyIGVuIGZvcm1hdCBkYXRlOiBgw4lkaXRlciBsZXMgY2VsbHVsZXMgLT4gVHJhbnNmb3JtYXRpb25zIGNvdXJhbnRlcyAtPiBFbiBkYXRlYC4gICAgDQo8L2Rpdj4NCg0KPC9icj4NCg0KPGRpdiBjbGFzcyA9ICJib3gyIj4NCjIuICoqRmVuw6p0cmUgR1JFTCoqIC0+IEZ1c2lvbm5lciBsZXMgY29sb25uZXM6ICpBbm7DqWUgY2l2aWxlKiwgKk1vaXMgY2FsZW5kcmllciosICpqb3VycyBkdSBtb2lzKiBldCAqSGV1cmUgZGUgcmVwcmlzZSoNCjwvZGl2Pg0KDQo8ZGl2IGNsYXNzID0gImJveDEiPg0KLSBBbm7DqWUgY2l2aWxlIC0+IMOJZGl0ZXIgbGEgY29sb25uZSAtPiBBam91dGVyIHVuZSBjb2xvbm5lIGVuIGZvbmN0aW9uIGRlIGNldHRlIGNvbG9ubmU6ICANCg0KYGNlbGxzWyJBbm7DqWUgY2l2aWxlIl0udmFsdWUgKyAiLSIgKyAiMCIgKyBjZWxsc1siTW9pcyBjYWxlbmRyaWVyIl0udmFsdWUgKyAiLSIgKyAiMCIgKyBjZWxsc1siSm91ciBkdSBtb2lzIl0udmFsdWUgKyAiICIgKyAgY2VsbHNbIkhldXJlIGRlIGwnaW5jaWRlbnQiXS52YWx1ZWAuICANCg0KLSBWw6lyaWZpZXIgbGEgdHJhbnNmb3JtYXRpb24gYXZlYyB1bmUgZmFjZXR0ZSBgdmFsdWUudHlwZSgpYC4gIA0KDQotIFJlY29tbWVuY2VyIGxhIGpvaW50dXJlIHBvdXIgY3LDqWVyIHVuZSBjb2xvbm5lIGF2ZWMgbGEgZGF0ZS1oZXVyZSBkZSBmaW4gZGUgbCdpbmNpZGVudA0KYGNlbGxzWyJBbm7DqWUgY2l2aWxlIl0udmFsdWUgKyAiLSIgKyAiMCIgKyBjZWxsc1siTW9pcyBjYWxlbmRyaWVyIl0udmFsdWUgKyAiLSIgKyAiMCIgKyBjZWxsc1siSm91ciBkdSBtb2lzIl0udmFsdWUgKyAiICIgKyAgY2VsbHNbIkhldXJlIGRlIGwnaW5jaWRlbnQiXS52YWx1ZWAuICANCg0KLSBUcmFuc2Zvcm1lciBlbiBmb3JtYXQgZGF0ZTogYMOJZGl0ZXIgbGVzIGNlbGx1bGVzIC0+IFRyYW5zZm9ybWF0aW9ucyBjb3VyYW50ZXMgLT4gRW4gZGF0ZWAuICANCjwvZGl2Pg0KDQo8L2JyPg0KDQo8ZGl2IGNsYXNzID0gImJveDIiPg0KQ2FsY3VsZXIgbGEgZHVyw6llIGRlIGwnaW5jaWRlbnQgIA0KPC9kaXY+DQo8ZGl2IGNsYXNzID0gImJveDEiPg0KDQotIENyw6llciB1bmUgbm91dmVsbGUgY29sb25uZSB2aWRlOiAgDQpgw4lkaXRlciBsYSBjb2xvbm5lID4gQWpvdXRlciB1bmUgY29sb25uZSBlbiBmb25jdGlvbiBkZSBjZXR0ZSBjb2xvbm5lIGAgLT4gQ2hvaXNpciB1biBub3V2ZWF1IG5vbSBldCBsZSBjb250ZW51OiAiIi4gIA0KDQotIFBvdXIgY2FsY3VsZXIgdW5lIGRpZmbDqXJlbmNlIGVudHJlIGRhdGU6IGBkaWZmKGRhdGUxLCBkYXRlMiwgInJlc3VsdHMgZm9ybWF0IilgLiAgICANCg0KYGRpZmYoY2VsbHNbJ2RhdGUyJ10udmFsdWUsY2VsbHNbJ2RhdGUxJ10udmFsdWUsICdtaW51dGVzJylgLiAgIA0KPC9kaXY+DQoNCjwvYnI+DQoNCioqKg0KDQojIDkuIExlIGxhbmdhZ2UgR1JFTCANCg0KDQotICpHb29nbGUgUmVmaW5lIEV4cHJlc3Npb24gTGFuZ3VhZ2UqIA0KLSBMYW5nYWdlIHNpbWlsYWlyZSDDoCBqYXZhc2NyaXB0IGV0IGZvcm11bGVzIGV4Y2VsLiAgICANCi0gUGVybWV0IGxhIHLDqWRhY3Rpb24gZCdleHByZXNzaW9ucyB2aXNhbnQgw6AgbWFuaXB1bGVyL3RyYW5zZm9ybWVyIGxlIGNvbnRlbnUgZGVzIGNlbGx1bGVzIGQndW5lIGNvbG9ubmUuICANCihWb2lyIGxhIFtkb2N1bWVudGF0aW9uIG9mZmljaWVsbGVdKGh0dHBzOi8vZG9jcy5vcGVucmVmaW5lLm9yZy9tYW51YWwvZ3JlbCkgcG91ciBwbHVzIGRlIGTDqXRhaWxzKSAgDQotIExhbmdhZ2UgY29tcG9zw6kgZGUgW2ZvbmN0aW9uc10oaHR0cHM6Ly9kb2NzLm9wZW5yZWZpbmUub3JnL21hbnVhbC9ncmVsZnVuY3Rpb25zKSBldCBkJ1tvYmpldHNdKGh0dHBzOi8vZG9jcy5vcGVucmVmaW5lLm9yZy9tYW51YWwvZXhwcmVzc2lvbnMjdmFyaWFibGVzKS4NCg0KPC9icj4NCg0KIyMgIDkuMS4gR1JFTCAtIFByaW5jaXBlcyBkZSBiYXNlIA0KDQojIyMjIFV0aWxpc2UgdW5lIHN5bnRheGUgcGFydGljdWxpw6hyZSBwb3VyIGNpYmxlciBsZXMgb2JqZXRzICh2YXJpYWJsZXMpOiAgDQotIENvbnRlbnUgZGUgY29sb25uZSBhY3R1ZWxsZTogYHZhbHVlYC4gICAgIA0KLSBDb250ZW51IGQndW5lIGF1dHJlIGNvbG9ubmU6IGBjZWxsc1snbm9tLWNvbG9ubmUnXS52YWx1ZWAuICAgIA0KLSBDb250ZW51IHRleHR1ZWw6ICJndWlsbGVtZXQgc2ltcGxlIG91IGRvdWJsZSIuICAgIA0KDQo8L2JyPg0KDQojIyMjIERldXggZm9ybWF0cyBkZSBub3RhdGlvbjogIA0KLSBJbWJyaXF1w6llOiAodHJpbSh0b0xvd2VyY2FzZSh2YWx1ZSkpLiAgICANCi0gKipTw6lxdWVudGllbGxlKio6IHZhbHVlLnRvTG93ZXJjYXNlKCkudHJpbSgpIChwbHVzIGZhY2lsZSDDoCBsaXJlKS4gICAgDQoNCjwvYnI+DQoNCiMjIyMgRGlmZsOpcmVudHMgdHlwZXMgZGUgZm9uY3Rpb25zOiAgDQotIExlcyBmb25jdGlvbnMgZXQgbGV1ciBjb21wb3J0ZW1lbnQgZMOpcGVuZHJvbnQgZHUgdHlwZSBkZSBkb25uw6llcyBtYW5pcHVsw6llcy4gIA0KLSBbQ2VydGFpbmVzIGZvbmN0aW9uc10oaHR0cHM6Ly9kb2NzLm9wZW5yZWZpbmUub3JnL21hbnVhbC9ncmVsZnVuY3Rpb25zI3NsaWNlYS1uLWZyb20tbi10by1vcHRpb25hbCkgcGVybWV0dGVudCBkZSB0cmFuc2Zvcm1lciBsZSBjb250ZW51IGRlIGNlbGx1bGVzIGVuIGBhcnJheXNgIChsaXN0ZSBkJ8OpbMOpbWVudHMpIGV0IGRlIGxlcyBtYW5pcHVsZXIuICANCi0gW0NlcnRhaW5lcyBmb25jdGlvbnNdKGh0dHBzOi8vZG9jcy5vcGVucmVmaW5lLm9yZy9tYW51YWwvZXhwcmVzc2lvbnMjcmVndWxhci1leHByZXNzaW9ucykgcGVybWV0dGVudCBkJ3V0aWxpc2VyIGxlcyBbZXhwcmVzc2lvbnMgcsOpZ3VsacOocmVzXSgjZXhwcmVzc2lvbikuICANCg0KPC9icj4NCg0KIyMjIyBEaWZmw6lyZW50cyB0eXBlcyBkJ29ww6lyYXRldXJzOiAgDQpTZWxvbiBsZSBmb3JtYXQsIGRpZmbDqXJlbnRzIHR5cGVzIGQnKipvcMOpcmF0ZXVycyoqIHBldXZlbnQgw6p0cmUgdXRpbGlzw6lzIGVudHJlIGxlcyB2YWxldXJzOiAgDQoJLSBPcMOpcmF0ZXVycyBhcml0aG3DqXRpcXVlczogKywgLSwgKiwgLyAgDQoJLSBPcMOpcmF0ZXVycyBkZSBjb21wYXJhaXNvbjogPT0sID4sIDwgIA0KICANCioqUGFyIGV4ZW1wbGU6KioNCg0KLSBMZSAiKyIgZW50cmUgZGV1eCBjb250ZW51cyBudW3DqXJpcXVlcyA9IHNvbW1lDQoNCiFbXShpbWFnZXMvT1IzMC5qcGcpDQoNCi0gTGUgIisiIGF2ZWMgdW4gY29udGVudSB0ZXh0dWVsID0gY29uY2F0w6luYXRpb24NCg0KIVtdKGltYWdlcy9PUjMxLmpwZykNCg0KPC9icj4NCg0KKioqICANCg0KIyMgIDkuMi4gR1JFTCAtIEwnaW5kZXhhdGlvbiwgbGEgc8OpbGVjdGlvbiBldCBsYSBtYW5pcHVsYXRpb24gZCfDqWzDqW1lbnRzOiAgDQoNCi0gQ2hhcXVlIGNhcmFjdMOocmUgY29tcG9zYW50IGxhIHZhbGV1ciBkJ3VuZSBjZWxsdWxlIGVzdCBvcmRvbm7DqSBkYW5zIHVuIGluZGV4ICoqw6AgcGFydGlyIGRlIDAqKiAoMWVyIMOpbMOpbWVudCkuDQotIENoYXF1ZSDDqWzDqW1lbnQgZCd1biAqYXJyYXkqIGVzdCBvcmRvbm7DqSBkYW5zIHVuIGluZGV4ICoqw6AgcGFydGlyIGRlIDAqKiAoMWVyIMOpbMOpbWVudCkgZXQgcGV1dCDDqnRyZSBjaWJsw6kgZ3LDomNlIGF1eCBgWyBdYC4gIA0KLSBMJ29ww6lyYXRldXIgYFsgXWAgcGVybWV0IGRlIGNpYmxlci9zw6lsZWN0aW9ubmVyIGRlcyBjaGFpbmVzIGRlIGNhcmFjdMOocmVzIG91IGRlcyBzb3VzLcOpbMOpbWVudHMgc3DDqWNpZmlxdWVzLiANCg0KPC9icj4NCg0KIyMjIEV4ZW1wbGUgLSBGb25jdGlvbiBzcGxpdCgpICAgDQoNCj4gYHZhbHVlWzAsOF1gIC0+IE1vbnRyw6lhbCAoUXXDqWJlYykgPSA/ICAgDQo+IGB2YWx1ZS5zcGxpdCgiKCIpWzFdYCAtPiBNb250csOpYWwgKFF1w6liZWMpID0gPyAgDQo+IGB2YWx1ZS5zcGxpdCgiKCIpWzFdLnNwbGl0KCIpIilbMF1gIC0+IE1vbnRyw6lhbCAoUXXDqWJlYykgPSA/DQo+IGB2YWx1ZVswXSArIHZhbHVlWzNdICsgdmFsdWVbN11gIC0+IE1vbnRyw6lhbCAoUXXDqWJlYykgPSA/XltNb250csOpYWwgLyBRdcOpYmVjKSAvIFF1w6liZWMgLyBNdGxdICANCg0KPC9icj4NCg0KIyMgRXhlcmNpY2UgLSBGb25jdGlvbiByZXBsYWNlKCkgIA0KDQo8ZGl2IGNsYXNzID0gImJveDEiPg0KDQpgSVNCTjogOTc4LTItMTMtMDgyOTMwLTBgDQoNCkNvbnNlcnZlciBzZXVsZW1lbnQgbGUgY2hpZmZyZSBkZSBsJ0lTQk4gc2FucyBsZXMgdHJhaXRzIGQndW5pb24/Xlt2YWx1ZVs1LDI0XS5yZXBsYWNlKCItIiwgIiIpXQ0KDQpJbmRpY2VzIDogIA0KDQotIERldXggZmHDp29ucyBkZSBmYWlyZTogYHZhbHVlW11gIE9VIGB2YWx1ZS5zcGxpdCgpYA0KLSBgcmVwbGFjZSgpYCAoaWwgZmF1dCByZW1wbGFjZXIgInF1ZWxxdWUgY2hvc2UiLCAicGFyIGxlIHZpZGUiKQ0KDQo8L2Rpdj4NCg0KPC9icj4NCg0KIyMjIEV4ZW1wbGUgLSBGb25jdGlvbiBzbGljZSgpICANCg0KYE1hcnRpbm9sbGksIFBhc2NhbDsgR2FicmllbGxpLCBOaW5vOyBGb3J0aWVyLCBDYXRoZXJpbmU7IEJlbGxlbWFyZSwgUGFzY2FsZWANCg0KIVtdKGltYWdlcy9PUjI1LmpwZykNCg0Kw4lkaXRlciBsZXMgY2VsbHVsZXMgLT4gVHJhbnNmb3JtZXIgLT4gYHZhbHVlLnNwbGl0KCI7ICIpLnNsaWNlKDEpLmpvaW4oIlxuIilgIA0KDQohW10oaW1hZ2VzL09SMzkuanBnKQ0KDQotIGBzcGxpdCgpYDogZGl2aXNlciBsYSBjZWxsdWxlIGVuIMOpbMOpbWVudHMgZGlzdGluY3RzIHN1ciBsYSBiYXNlIGR1IHPDqXBhcmF0ZXVyIDsNCi0gYHNsaWNlKClgIDogY29uc2VydmVyIGxlcyDDqWzDqW1lbnRzIMOgIHBhcnRpciBkZSBsJ8OpbMOpbWVudCAxIGRvbmMgc3VwcHJpbWUgbGUgMC4gDQotIGBqb2luKClgOiBqb2luZHJlIGF2ZWMgbGUgc8OpcGFyYXRldXIgOw0KDQo8L2JyPg0KDQojIyBFeGVyY2ljZSAtIEZvbmN0aW9uIHNvcnQoKSAgDQoNCjxkaXYgY2xhc3MgPSAiYm94MSI+DQoNCk1ldHRyZSBsZXMgbm9tcyBlbiBvcmRyZSBhbHBoYWLDqXRpcXVlIGV0IGxlcyBqb2luZHJlIGF2ZWMgdW5lIHZpcmd1bGUuXlt2YWx1ZS5zcGxpdCgiOyAiKS5zb3J0KCkuam9pbigiLCAiKV0NCg0KSW5kaWNlczogIA0KDQotIGBzcGxpdCgpYDogZGl2aXNlciBsYSBjZWxsdWxlIGVuIMOpbMOpbWVudHMgZGlzdGluY3RzIHN1ciBsYSBiYXNlIGR1IHPDqXBhcmF0ZXVyICANCg0KLSBgc29ydCgpYDogdHJpZXIgbGVzIMOpbMOpbWVudHMgKHJlc3RlIHZpZGUpDQoNCi0gYGpvaW4oKWA6IGpvaW5kcmUgYXZlYyBsZSBzw6lwYXJhdGV1ciAgDQoNCg0KPC9kaXY+DQoNCg0KPC9icj4NCg0KIyMjIEV4ZW1wbGUgLSBGb25jdGlvbiByZXZlcnNlKCkgIA0KDQrDiWRpdGVyIGxlcyBjZWxsdWxlcyAtPiBUcmFuc2Zvcm1lciAtPiBgdmFsdWUuc3BsaXQoIjsgIilbMV0uc3BsaXQoIiwgIikucmV2ZXJzZSgpLmpvaW4oIiAiKSArICIgZXN0IGxlIG1laWxsZXVyImAgDQoNCiFbXShpbWFnZXMvT1IzOC5qcGcpDQoNCi0gYHNwbGl0KClgOiBkaXZpc2UgbGEgY2VsbHVsZSBlbiDDqWzDqW1lbnRzIGRpc3RpbmN0cyBzdXIgbGEgYmFzZSBkdSBzw6lwYXJhdGV1ciA7IGV0IHJldGllbnQgbGUgZGV1eGnDqG1lIMOpbMOpbWVudA0KLSBgc3BsaXQoKWA6IGRpdmlzZSBjZXQgw6lsw6ltZW50IHN1ciBsZSBzw6lwYXJhdGV1ciAsDQotIGByZXZlcnNlKClgOiBpbnZlcnNlIGwnb3JkcmUgZGVzIGRldXggw6lsw6ltZW50cw0KLSBgam9pbigpYDogcmF0dGFjaGUgbGVzIGRldXggw6lsw6ltZW50cyBkaXZpc8OpIGF2ZWMgdW4gZXNwYWNlDQoNCjwvYnI+DQoNCioqKg0KDQojIyA5LjMuIENyw6llciBkZXMgZmFjZXR0ZXMgYXZlYyBHUkVMDQoNCiMjIEV4ZXJjaWNlcw0KDQo8ZGl2IGNsYXNzID0gImJveDEiPg0KDQpDcsOpZXIgdW5lIGZhY2V0dGUgcG91ciBsaXN0ZXIgbGVzIGNhcyBzZWxvbiBsJypoZXVyZSBkZSBsJ2luY2lkZW50KiBzZXVsZW1lbnQsIHNhbnMgbGVzIG1pbnV0ZXMgKDIgcHJlbWllcnMgY2FyYWN0w6hyZXMpLiBDb21tZW50IGZhaXJlIGFmZmljaGVyIGxlcyBtaW51dGVzIHNldWxlbWVudD9eW3ZhbHVlWzMsNV0gb3UgdmFsdWUuc3Vic3RyaW5nKDMpXSANCg0KYHZhbHVlWzAsMl1gICAgDQoNCjwvZGl2Pg0KDQo8L2JyPg0KDQo8ZGl2IGNsYXNzID0gImJveDEiPg0KDQpDcsOpZXIgdW5lIGZhY2V0dGUgc3VyIGxhIGNvbG9ubmUgKkNvZGUgZGUgbGlldSogcG91ciBpZGVudGlmaWVyIGxlcyBjYXMgZG9udCBsYSB2YWxldXIgY29tbWVuY2UgcGFyICJDw7R0ZSIgIA0KDQpgdmFsdWUuc3RhcnRzV2l0aCjigJxDw7R0ZeKAnSlgICAgIA0KDQo8L2Rpdj4NCg0KPC9icj4NCg0KPGRpdiBjbGFzcyA9ICJib3gxIj4NCg0KQ3LDqWVyIHVuZSBmYWNldHRlIHBvdXIgaWRlbnRpZmllciBsZXMgY2FzIGRvbnQgbGEgdmFsZXVyIGRhbnMgbGEgY29sb25uZSAqQ2F1c2UgcHJpbWFpcmUqIGVzdCBsYSBtw6ptZSBxdWUgZGFucyBsYSBjb2xvbm5lICpDYXVzZSBzZWNvbmRhaXJlKg0KDQpgdmFsdWUgPT0gY2VsbHNbIkNhdXNlIHNlY29uZGFpcmUiXS52YWx1ZWAgICANCg0KPC9kaXY+DQoNCjwvYnI+DQoNCioqKg0KDQoNCiMjIDkuNC4gUmVjaGVyY2hlci9yZW1wbGFjZXIgdW4gY2FyYWN0w6hyZSBkYW5zIHRvdXRlcyBsZXMgY29sb25uZXMgYXZlYyBHUkVMDQoNCiMjIEV4ZXJjaWNlDQoNCjxkaXYgY2xhc3MgPSAiYm94MiI+DQpSZW1wbGFjZXIgbGVzIHZhbGV1cnMgIiMiIGRhbnMgdG91dGUgbGEgYmFzZSBkZSBkb25uw6llcyBwYXIgImF1Y3VuIioqICAgDQo8L2Rpdj4NCjxkaXYgY2xhc3MgPSAiYm94MSI+DQotIFF1ZWwgcHJvYmzDqG1lIGNlIHJlbXBsYWNlbWVudCBwZXV0LWlsIHByb3ZvcXVlcj8gICAgDQotIEV4cGxvcmVyIGwnaW1wYWN0IGRlcyB0cm9pcyBleHByZXNzaW9ucyBkZSByZW1wbGFjZW1lbnQgc3VpdmFudGVzOiAgDQoNCjEuIGB2YWx1ZS5yZXBsYWNlKCIjIiwgImF1Y3VuIilgICAgDQoocmVtcGxhY2UgbGUgY2FyYWN0w6hyZSAjOiBhdWN1biBldCBhdWN1bk4vRCApICAgICANCiANCjIuIGBpZih2YWx1ZS5jb250YWlucygiIyIpLCJhdWN1biIsIHZhbHVlKWAgICANCihyZW1wbGFjZSBsZXMgY2VsbHVsZXMgZGVzICMgZXQgI05EIHBhciBhdWN1bikgIA0KDQozLiBgaWYodmFsdWU9PSgiIyIpLCJhdWN1biIsIHZhbHVlKWAgICAgIA0KKHJlbXBsYWNlIHNldWxlbWVudCBsZXMgY2VsbHVsZXMgIywgcGFzIGxlcyAjTkQgcGFyIGF1Y3VuKSANCjwvZGl2Pg0KDQo8L2JyPg0KDQoNCioqKg0KDQojIyA5LjUuIENyw6llciBldCBjb3BpZXIgZGVzIGNvbG9ubmVzDQoNCjwvYnI+DQoNCmDDiWRpdGVyIGxhIGNvbG9ubmUgLT4gQWpvdXRlciB1bmUgY29sb25uZSBlbiBmb25jdGlvbiBkZSBjZXR0ZSBjb2xvbm5lYA0KDQohW10oaW1hZ2VzL09SMzIuanBnKQ0KDQoNCiMjIEV4ZXJjaWNlDQoNCjxkaXYgY2xhc3MgPSAiYm94MiI+DQpDcsOpZXIgdW5lIG5vdXZlbGxlIGNvbG9ubmUgc3VyIGxhIGJhc2UgZGUgbGEgY29sb25uZSAqSm91ciBkZSBsYSBzZW1haW5lKiBpbmRpcXVhbnQgc2kgbGUgam91ciBlc3QgZW4gc2VtYWluZSBvdSBmaW4gZGUgc2VtYWluZS4NCjwvZGl2Pg0KPGRpdiBjbGFzcyA9ICJib3gxIj4NCmBpZih2YWx1ZSA+IDUsImZpbiBkZSBzZW1haW5lIiwic2VtYWluZSIpYA0KPC9kaXY+DQoNCjwvYnI+DQoNCjxkaXYgY2xhc3MgPSAiYm94MiI+DQpDcsOpZXIgdW5lIGNvbG9ubmUgw6AgcGFydGlyIGRlIGxhIGNvbG9ubmUgKmhldXJlIGRlIGwnaW5jaWRlbnQqIGVuIG5lIGNvbnNlcnZhbnQgcXVlIGwnaGV1cmUsIHNhbnMgbGVzIG1pbnV0ZXMsIGV0IHJham91dGVyIGxhIGxldHRyZSBoIHBvdXIgZG9ubmVyIHBhciBleGVtcGxlIGNlY2k6IDE1OjEyICAtPiAgMTVoLiAgDQo8L2Rpdj4NCjxkaXYgY2xhc3MgPSAiYm94MSI+DQpgdmFsdWUuc3BsaXQoJzonKVswXSArICJoImAuICANCg0KT3UNCg0KYHZhbHVlLnNwbGl0QnlMZW5ndGhzKDIpWzBdICsgImgiYC4gIA0KPC9kaXY+DQoNCjwvYnI+DQoNCg0KKioqDQoNCg0KIyAxMC4gTGVzIGV4cHJlc3Npb25zIHLDqWd1bGnDqHJlcyB7I2V4cHJlc3Npb259DQoNCiMjIDEwLjEuIENhcmFjdMOpcmlzdGlxdWVzICANCg0KLSBMJ3VzYWdlIGRlIEdSRUwgcGVybWV0IGRlcyBtYW5pcHVsYXRpb25zIGRlIGRvbm7DqWVzIGJlYXVjb3VwIHBsdXMgYXZhbmPDqWVzIHF1ZSBsJ3V0aWxpc2F0aW9uIGRlcyBmb25jdGlvbnMgYXV0b21hdGlzw6llcywgbWFpcyBPcGVuUmVmaW5lIHBlcm1ldCBlbiBwbHVzIGRlIGNvbWJpbmVyIGwndXRpbGlzYXRpb24gZGVzIGV4cHJlc3Npb25zIHLDqWd1bGnDqHJlcyBhdmVjIEdSRUwgcG91ciBlbiBhdWdtZW50ZXIgbGEgcHVpc3NhbmNlLiANCi0gTGVzIGV4cHJlc3Npb25zIHLDqWd1bGnDqHJlcyBwZXJtZXR0ZW50LCDDoCBwYXJ0aXIgZCd1bmUgc3ludGF4ZSBzcMOpY2lmaXF1ZSwgZCdpZGVudGlmaWVyIGRlcyBwYXR0ZXJucyBkYW5zIHVuIGNvbnRlbnUuICANCi0gTG9yc3F1J3V0aWxpc8OpZXMgYXZlYyBHUkVMLCBjZXMgZXhwcmVzc2lvbnMgcGVybWV0dGVudCBkb25jIGQnaWRlbnRpZmllciBldCBkJ2V4dHJhaXJlIGRlcyBjb250ZW51cyB0csOocyBwcsOpY2lzIHBvdXIgZW5zdWl0ZSBsZXMgbWFuaXB1bGVyIHNlbG9uIGxlcyBiZXNvaW5zLiAgDQotIEVsbGVzIHBldXZlbnQgw6p0cmUgdXRpbGlzw6llcyDDoCBkaWZmw6lyZW50cyBlbmRyb2l0cyBkYW5zIE9wZW5SZWZpbmUgZXQgZG9pdmVudCB0b3Vqb3VycyDDqnRyZSBlbnRvdXLDqWVzIGRlIGAvIC9gOiBmaWx0cmVzLCBmYWNldHRlcywgZmVuw6p0cmUgR1JFTC4NCi0gQ2VydGFpbmVzIGV4cHJlc3Npb25zIHBldXZlbnQgcyfDqWNyaXJlIGVuIEdSRUwgYXZlYyBvdSBzYW5zIHJlZ2V4LiAgDQotIExlcyBmb25jdGlvbnMgR1JFTCBxdWkgYWNjZXB0ZW50IGxlcyBleHByZXNzaW9ucyByw6lndWxpw6hyZXM6IGByZXBsYWNlYCwgYG1hdGNoYCwgYHBhcnRpdGlvbmAsIGBycGFydGl0aW9uYCwgYHNwbGl0YC4NCg0KPC9icj4NCg0KIVtdKGltYWdlcy9PUjMzLmpwZykNCg0KDQotIE1haXMgY2VydGFpbmVzIGZvbmN0aW9ucyAoY29tbWUgYG1hdGNoYCkgbidhY2NlcHRlbnQgcXVlIGNlcyBleHByZXNzaW9ucy4gIA0KPC9icj4NCg0KPGRpdiBjbGFzcyA9ICJub3RlIj4NCg0KTGVzIGV4cHJlc3Npb25zIHLDqWd1bGnDqHJlcyBwZXV2ZW50IMOqdHJlIHV0aWxpc8OpZXMgYXZlYyBwbHVzaWV1cnMgYXV0cmVzIGxhbmdhZ2VzIGRvbnQgW1JdKGh0dHBzOi8vdG93YXJkc2RhdGFzY2llbmNlLmNvbS9hLWdlbnRsZS1pbnRyb2R1Y3Rpb24tdG8tcmVndWxhci1leHByZXNzaW9ucy13aXRoLXItZGY1ZTg5N2NhNDMyKSBldCBbUHl0aG9uXShodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2hvd3RvL3JlZ2V4Lmh0bWwpIGV0IGRhbnMgZGVzIGxvZ2ljaWVscyBxdWkgbidvbnQgcmllbiDDoCB2b2lyIGF2ZWMgbGVzIHN0YXRpc3RpcXVlcyBjb21tZSBbT3Blbk9mZmljZV0oaHR0cHM6Ly93aWtpLm9wZW5vZmZpY2Uub3JnL3dpa2kvRG9jdW1lbnRhdGlvbi9Ib3dfVG9zL1JlZ3VsYXJfRXhwcmVzc2lvbnNfaW5fV3JpdGVyKS4NCg0KUG91ciBlbiBzYXZvaXIgcGx1czogIA0KLSBodHRwczovL2dpdGh1Yi5jb20vT3BlblJlZmluZS9PcGVuUmVmaW5lL3dpa2kvVW5kZXJzdGFuZGluZy1SZWd1bGFyLUV4cHJlc3Npb25zICANCi0gaHR0cHM6Ly9yZWdleDEwMS5jb20vICANCg0KPC9kaXY+DQoNCjwvYnI+DQoNCioqKg0KDQojIyAxMC4yLiBMYSBzeW50YXhlIGRlIGJhc2U6ICAgDQoNCkxhIHN5bnRheGUgZXN0IGNvbXBvc8OpZSBkJ8OpbMOpbWVudHMgcGVybWV0dGFudCBkZSAgY2libGVyIGRlcyBjYXJhY3TDqHJlcyBwcsOpY2lzIGV0IGRlIGTDqWZpbmlyIGxldXIgZW1wbGFjZW1lbnQgZXQgbGV1ciBvY2N1cnJlbmNlLg0KDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rDQp8IFRZUEVTIERFIENBUkFDVMOIUkVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFFVQU5USUZJQ0FURVVSUyBFVCBFTVBMQUNFTUVOVCAgICAgICAgICAgICAgICAgfCANCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSsNCnwgYC5gIDogTuKAmWltcG9ydGUgcXVvaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGArYCA6IDEgb3UgcGx1cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIA0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKw0KfCBgXHdgIDogbidpbXBvcnRlIHF1ZWwgbW90LCBjaGlmZnJlIG91IF8gIChgXFdgIDogc2F1ZikgICAgIHwgYCpgIDogMCBvdSBwbHVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICANCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsNCnwgYFxkYCA6IENoaWZmcmVzICAgICAgKGBcRGAgOiBzYXVmKSAgICAgICAgICAgICAgICAgICAgfCBgP2AgOiAwIG91IHVuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rDQp8IGBcc2AgOiBFc3BhY2VzICAgICAgICAgKGBcU2AgOiBzYXVmKSAgICAgICAgICAgICAgICAgIHwgYHsyfWAgOiBOb21icmUgZXhhY3QgKGljaSAyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IA0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsNCnwgYFtBLVpdYCA6IE1hanVzY3VsZXMgICAgIChgW15BLVpdYCA6IHNhdWYpICAgICAgICAgICAgfCBgeyw0fWAgOiBFbnRyZSAwIGV0IDQgaW5jbC4gICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICANCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rDQp8IGBbYS16XWAgOiBNaW51c2N1bGVzICAgICAgKGBbXmEtel1gIDogc2F1ZikgICAgICAgICAgIHwgYHs0LH1gIDogNCBvdSBwbHVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCANCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rDQp8IGBbYWJkO11gIDogbGVzIGxldHRyZXMgYSwgYiwgYywgZCBldCBsZSA7ICAgICAgICAgICAgIHwgYHsxOzN9YCA6IDEgT1UgMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsNCnwgYGFiY2RgIDogdW5lIG91IHBsdXNpZXVycyBsZXR0cmVzIGV4YWN0ZXMgICAgICAgICAgICAgfCBgezEsM31gIDogRW50cmUgMSBldCAzIGluY2wuICAgICAgICAgICAgICAgICAgICAgfCANCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKw0KfCBgfGAgOiBPdSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBgXmAgOiBEw6lidXQgZCd1bmUgbGlnbmUgICAgICAgICAgICAgICAgfCANCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKw0KfCBgKClgIDogR3JvdXBlciB1biBjb250ZW51IGV0IGxlIGdhcmRlciBlbiBtw6ltb2lyZSAgICAgIHwgYCRgIDogRmluIGQndW5lIGxpZ25lIG91IHJhcHBlbGVyIHVuIGdyb3VwZSAgICB8DQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsNCnwgIGBcYCA6IENoZXJjaGVyIHVuIGNhcmFjdMOocmUgc3DDqWNpYWwgbGl0dMOpcmFsZW1lbnQgICAgfCBTYW5zIHF1YW50aWZpY2F0ZXVyLCBsJ29jY3VycmVuY2UgZXN0IGRlIDEgICAgICAgfA0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rDQoNCiMjIyMjIFBhciBleGVtcGxlLCBqZSBjaGVyY2hlIHVuIGNvbnRlbnUgY29ycmVzcG9uZGFudCBhdSBtb3RpZjogIA0KDQpgXlxkezR9ICtbQS1aXVwuYCAgICANCiAgIA0KLSBkw6lidXRlIHBhciA0IGNoaWZmcmVzICAgDQotIHN1aXZpIGQndW4gZXNwYWNlIG91IHBsdXMgICANCi0gc3VpdmkgZCd1bmUgbGV0dHJlIG1hanVzY3VsZSBhdmVjIHVuIHBvaW50ICAgDQoNCjwvYnI+DQoNCiMjIyMjIEF1dHJlcyBleGVtcGxlcyBhdmVjIGxhIHN5bnRheGUgT3BlblJlZmluZToNCg0KLSBgdmFsdWUuZmluZCgvW0NjXWFyb2xpbmUvKWA6IENhcm9saW5lIGV0IGNhcm9saW5lDQoNCi0gYHZhbHVlLmZpbmQoL2NhK3JvbGluZS8pYDogY2Fyb2xpbmUgZXQgY2FhYWFyb2xpbmUNCg0KLSBgdmFsdWUuZmluZCgvY2Eqcm9saW5lLylgOiBjYXJvbGluZSwgY2FhYXJvbGluZSBldCBjcm9saW5lDQoNCi0gYHZhbHVlLmZpbmQoL2NhP3JvbGluZS8pYDogY2Fyb2xpbmUgZXQgY3JvbGluZSBtYWlzIHBhcyBjYWFhcm9saW5lDQoNCi0gYHZhbHVlLmZpbmQoL2NhezR9cm9saW5lLylgOiBjYWFhYXJvbGluZQ0KDQotIGB2YWx1ZS5maW5kKC9eQ2Fyb2xcYi8pYDogQ2Fyb2wgZW4gZMOpYnV0IGQnZXhwcmVzc2lvbiwgbWFpcyBwYXMgQ2Fyb2xpbmUgKFxiID0gImJvdW5kYXJ5IikNCg0KLSBgdmFsdWUuZmluZCgvY1thLXpdezZ9ZS8pYDogYyArIDYgbWludXNjdWxlcyArIGUNCg0KLSBgdmFsdWUuZmluZCgvQ1thLXpBLVowLTldezZ9ZS8pYDogQyArIDYgbWludXNjdWxlcywgbWFqdXNjdWxlcyBvdSBjaGlmZnJlcyArIGUNCg0KLSBgdmFsdWUuZmluZCgvQ1x3ezZ9ZS8pYDogQyArIFtBLVphLXowLTlfXSArIGUNCg0KLSBgdmFsdWUuZmluZCgvQy57Nn1lLylgOiBDICsgNiBuJ2ltcG9ydGUgcXVvaSArIGUNCg0KDQoqKioNCg0KIyMgRXhlcmNpY2UNCg0KIyMjIE1hbmlwdWxlciBsZXMgw6lsw6ltZW50cyBkZSByw6lmw6lyZW5jZXMgYmlibGlvZ3JhcGhpcXVlcw0KDQohW10oaW1hZ2VzL09SMzYuanBnKQ0KDQo8ZGl2IGNsYXNzID0gImJveDEiPg0KMS4gQWxsZXIgc3VyIGxlIFtndWlkZSBBUEFdKGh0dHBzOi8vYmliLnVtb250cmVhbC5jYS9jaXRlci9zdHlsZXMtYmlibGlvZ3JhcGhpcXVlcy9hcGE/dGFiPTMyODEpLiAgICAgDQoyLiBDb3BpZXIgbGVzIGRldXggcsOpZsOpcmVuY2VzIGRlIExlbWFpcmUgZXQgTGVib3ZpY2kgYXUgcG9pbnQgMi4xLiAgICAgIA0KMy4gRGFucyBPcGVuUmVmaW5lLCBjbGlxdWVyIHN1ciBsZSBwZXRpdCBsb2dvIGVuIGhhdXQgw6AgZ2F1Y2hlIC0+IGBDcsOpZXIgdW4gcHJvamV0YCAtPiBgUHJlc3NlLXBhcGllcmA6IENvbGxlciBsZXMgZGV1eCByw6lmw6lyZW5jZXMgZW4gIGFqb3V0YW50IHVuIHPDqXBhcmF0ZXVyICoqIjsiKiogw6AgbGEgZmluIGRlIGxhIHByZW1pw6hyZSAtPiBTdWl2YW50LiAgICAgICANCg0KNC4gTW9kaWZpZXIgbGVzIG9wdGlvbnM6IA0KICAtIExlcyBjb2xvbm5lcyBzb250IHPDqXBhcsOpZXMgcGFyIC0gcGVyc29ubmFsaXPDqSAiOyIuICANCiAgLSBEw6ljb2NoZXIgIkFuYWx5c2VyIGxhIG91IGxlcwkxIGxpZ25lKHMpIHN1aXZhbnRlKHMpIGNvbW1lIGRlcyBlbnTDqnRlcyBkZSBjb2xvbm5lcyIuICANCjUuIENyw6llciBwcm9qZXQuICAgDQo8L2Rpdj4NCg0KPC9icj4NCg0KPGRpdiBjbGFzcyA9ICJib3gxIj4NCjYuIGDDiWRpdGVyIGxhIGNvbG9ubmUgLT4gQWpvdXRlciB1bmUgY29sb25uZSBlbiBmb25jdGlvbiBkZSBjZXR0ZSBjb2xvbm5lYCAgDQoNCjcuIEV4YW1pbmVyIGwnaW1wYWN0IGRlIGNlcyBkZXV4IGNvbW1hbmRlcyAqKkdSRUwgKyByZWdleCoqLiBRdSdlc3QtY2UgcXVpIHNlIHBhc3NlPw0KDQotIMOJZGl0ZXIgbGVzIGNlbGx1bGVzIC0+IFRyYW5zZm9ybWVyOiANCg0KPiBgdmFsdWUuZmluZCgvXCguKj9cKS8pYCAgDQoNCj4gYHZhbHVlLmZpbmQoL1woLio/XCkvKS5qb2luKCcsJykucmVwbGFjZSgiKCIsIiAiKS5yZXBsYWNlKCIpIiwgIiIpYCAgDQoNCi0+IEF0dGVudGlvbiBhdXggW3F1YW50aWZpY2F0ZXVycyAiZ291cm1hbmRzIl0oaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvZG90bmV0L3N0YW5kYXJkL2Jhc2UtdHlwZXMvcXVhbnRpZmllcnMtaW4tcmVndWxhci1leHByZXNzaW9ucyNncmVlZHktYW5kLWxhenktcXVhbnRpZmllcnMpICh2cyBwYXJlc3NldXgpLg0KDQo8L2JyPg0KDQrDiWRpdGVyIGxhIGNvbG9ubmUgLT4gQWpvdXRlciB1bmUgY29sb25uZSBlbiBmb25jdGlvbiBkZSBjZXR0ZSBjb2xvbm5lOiAgDQoNCiAgLSBDcsOpZXIgbGEgY29sb25uZSBBdXRldXIgOiBgdmFsdWUucGFydGl0aW9uKCIoIilbMF1gIG91IGB2YWx1ZS5zcGxpdCgiKCIpWzBdYCAgIA0KICAtIENyw6llciBsYSBjb2xvbm5lIEFubsOpZTogYHZhbHVlLnBhcnRpdGlvbigiKCIpWzJdLnBhcnRpdGlvbigiKSIpWzBdYCAgIG91IGF2ZWMgcmVnZXg6IGB2YWx1ZS5tYXRjaCgvLio/KFxkezR9KS4qPy8pWzBdYC4gICAgDQogIC0gQ3LDqWVyIGxhIGNvbG9ubmUgdGl0cmU6IGB2YWx1ZS5wYXJ0aXRpb24oIikuIilbMl0ucGFydGl0aW9uKCIoIilbMF1gLiAgICAgIA0KICAtIENyw6llciBsYSBjb2xvbm5lIMOpZGl0ZXVyOiBgdmFsdWUucGFydGl0aW9uKCIpLiIpWzJdLnBhcnRpdGlvbigiKS4iKVsyXWAuICAgICANCiAgLSBDcsOpZXIgbGEgY29sb25uZSDDqWRpdGlvbjogYHZhbHVlLnBhcnRpdGlvbigiKS4iKVsyXS5wYXJ0aXRpb24oIigiKVsyXS5wYXJ0aXRpb24oIsOpZCIpWzBdYCBvdSBhdmVjIHJlZ2V4OiBgdmFsdWUubWF0Y2goLy4qKFxkKykuIMOpZC4qLylbMF1gLiAgDQogIC0gQ3LDqWVyIGxhIGNvbG9ubmUgdm9sdW1lOiBgdmFsdWUucGFydGl0aW9uKCJ2b2wuIilbMl0ucGFydGl0aW9uKCIpIilbMF1gIG91IGF2ZWMgcmVnZXg6IGB2YWx1ZS5tYXRjaCgvLip2b2wuIChcZCspLiovKVswXWAuICANCk1haXMgZW5jb3JlIGF2ZWMgcmVnZXg6ICANCi0gU3VwcHJpbWVyIGxlcyBsZXR0cmVzIGR1IHByw6lub206IGB2YWx1ZS5yZXBsYWNlKC8oXHNbQS1aXS5ccyl8KFxzW0EtWl0uLFxzKS8sICIgIilgLiAgDQotIFN1cHByaW1lciB0b3V0IGxlIGNvbnRlbnUgc2F1ZiBsZXMgbm9tcyBkZSBmYW1pbGxlOiBgdmFsdWUucmVwbGFjZSgvKFxzW0EtWl0uXHMpfChcc1tBLVpdLixccyl8KGV0KXwoLCkvLCAiICIpYC4gIA0KDQo8L2JyPg0KDQoqKioNCg0KIyAxMS4gVHJhbnNwb3NpdGlvbg0KDQojIyBFeGVyY2ljZTogdHJhbnNwb3NlciB1biB0YWJsZWF1IGQnaW5kaWNhdGV1cnMgZHUgV0RJDQo8L2JyPg0KDQoqKkZpY2hpZXIgb3JpZ2luYWwgdMOpbMOpY2hhcmfDqSBkZSBsYSBbQmFucXVlIG1vbmRpYWxlXShodHRwczovL2RhdGFiYW5rLmJhbnF1ZW1vbmRpYWxlLm9yZy9yZXBvcnRzLmFzcHg/c291cmNlPXdvcmxkLWRldmVsb3BtZW50LWluZGljYXRvcnMpIGVuIGZvcm1hdCAuY3N2IGNvbXBvc8OpIGRlIDUgcGF5cyBldCA0IGluZGljYXRldXJzIMOgIGwnaG9yaXpvbnRhbGUgZXQgMyBhbm7DqWVzIMOgIGxhIHZlcnRpY2FsZSoqICANCg0KLSBQb3VyIG91dnJpciBsZSBmaWNoaWVyIMOgIHBhcnRpciBkZSBzb24gZW1wbGFjZW1lbnQgc3VyIEdpdGh1YjogaHR0cHM6Ly9naXRodWIuY29tL0NSTE5QL29wZW5yZWZpbmUgDQogIC0gQ2xpcXVlciBzdXIgbGUgZmljaGllciAqV0RJX0RhdGFfRXh0cmFjdC5jc3YqIC0+IENsaXF1ZXIgc3VyIGxlIGJvdXRvbiBSQVcgLT4gY29waWVyIGwnYWRyZXNzZSBkdSBuYXZpZ2F0ZXVyLg0KICAtIERhbnMgT3BlblJlZmluZSwgQ3LDqWVyIHVuIHByb2pldCAtPiBBZHJlc3NlcyB3ZWIgKFVSTHMpIC0+IGNvbGxlciBsZSBsaWVuLg0KICANCiFbXShpbWFnZXMvT1ItdHJhbnNwb3NlMS5qcGcpDQoNCjwvYnI+DQoNCioqMS4gVHJhbnNwb3NlciBsZXMgZGF0ZXMgw6AgbCdob3Jpem9udGFsZSAoZm9ybWF0ICpsb25nKikqKiAgDQoNCjwvYnI+DQoNCirDiWRpdGVyIGxlcyBjZWxsdWxlcyAtPiBUcmFuc3Bvc2VyIC0+IFRyYW5zcG9zZXIgbGVzIGNlbGx1bGVzIGRlIHBsdXNpZXVycyBjb2xvbm5lcyBlbiBsaWduZXMuLi4qDQoNCg0KPC9icj4NCg0KDQohW10oaW1hZ2VzL09SLXRyYW5zcG9zZTIuanBnKQ0KDQo8L2JyPg0KDQoNCiFbXShpbWFnZXMvT1ItdHJhbnNwb3NlMy5qcGcpDQoNCjwvYnI+DQoNCioqMi4gUmVtcGxpciBhdXRvbWF0aXF1ZW1lbnQgbGVzIGNlbGx1bGVzIHZpZGVzIGRlcyBkZXV4IGNvbG9ubmVzIMOgIGxhIHZlcnRpY2FsZSoqDQoNCirDiWRpdGVyIGxlcyBjZWxsdWxlcyAtPiBSZWNvcGllciBsZXMgdmFsZXVycyBkYW5zIGxlcyBjZWxsdWxlcyB2aWRlcyBjb25zw6ljdXRpdmVzKg0KDQo8L2JyPg0KDQoqKjMuIFRyYW5zcG9zZXIgbGVzIGluZGljYXRldXJzIGVuIHZhcmlhYmxlcyDDoCBsYSB2ZXJ0aWNhbGUqKg0KDQoqVHJhbnNwb3NlciAtPiBDb252ZXJ0aXIgZW4gbGlzdGUgbGVzIGNvbG9ubmVzIGRlIGNsw6kvdmFsZXVyLi4uKg0KDQo8L2JyPg0KDQohW10oaW1hZ2VzL09SLXRyYW5zcG9zZTQuanBnKQ0KDQo8L2JyPg0KDQohW10oaW1hZ2VzL09SLXRyYW5zcG9zZTUuanBnKQ0KDQo8L2JyPg0KDQoNCioqKg0KDQojIDEyLiBFeHBvcnRlciB1biBmaWNoaWVyIGV0IGZlcm1lciBPcGVuUmVmaW5lDQoNCi0gRm9uY3Rpb24gw6AgdXRpbGlzZXIgbG9yc3F1ZSBsJ29uIGVzdCBwcsOqdCDDoCBleHBvcnRlciBzb24gZmljaGllciBlbiBkaWZmw6lyZW50cyBmb3JtYXRzIHBvdXIgdHJhdmFpbGxlciBkYW5zIHVuIGF1dHJlIGxvZ2ljaWVsICguY3N2LCAueGxzLi4uKQ0KLSBPUiBzYXV2ZWdhcmRlIGF1dG9tYXRpcXVlbWVudCBsZXMgZmljaGllcnMgc291cyBmb3JtZSBkJ2FyY2hpdmVzIGRlIHByb2pldCBkYW5zIHVuIGRvc3NpZXIgc3VyIGxlIHBvc3RlIGRlIHRyYXZhaWwgYXV4cXVlbGxlcyBvbiBwZXV0IGFjY8OpZGVyIGVuIGNsaXF1YW50IHN1ciBgT3V2cmlyIHVuIHByb2pldGAgc3VyIGxhIHBhZ2UgcHJpbmNpcGFsZS4NCi0gTCdvdXRpbCBgRXhwb3J0ZXVyIHRhYnVsYWlyZSBwZXJzb25uYWxpc8OpYCBlc3QgdHLDqHMgdXRpbGUgcG91ciBwYXJhbcOpdHJlciBsJ2V4cG9ydGF0aW9uIChzw6lsZWN0aW9uIGRlIGNvbG9ubmVzLCBmb3JtYXQgZGUgZGF0ZXMsIGZvcm1hdCBkZSBmaWNoaWVyLi4uKQ0KLSBGZXJtZXIgbCdvbmdsZXQgbmUgZmVybWUgcGFzIGxlIHNlcnZldXIgcXVpIGNvbnRpbnVlcmEgw6Agcm91bGVyIGVuIGFycmnDqHJlLXBsYW4uDQotIEFsbGVyIMOgIGxhIGZlbsOqdHJlIG5vaXJlIGR1IHRlcm1pbmFsIGV0IHV0aWxpc2VyIGxlcyB0b3VjaGVzIENUUkwgKyBDIGp1c3F1J8OgIGNlIHF1J2VsbGUgc2UgZmVybWUgZCdlbGxlLW3Dqm1lIChpbCBlc3QgcGFyZm9pcyBuw6ljZXNzYWlyZSBkZSByw6lww6l0ZXIgw6AgcGx1cyBkJ3VuZSByZXByaXNlKS4gTGUgZmljaGllciBzZXJhIGVucmVnaXN0csOpIHVuZSBkZXJuacOocmUgZm9pcyBldCBsZSBsb2dpY2llbCBzZXJhICBtYWludGVuYW50IGJlbCBldCBiaWVuIGZlcm3DqS4NCg0KPC9icj4NCg0KKioqDQoNCg0KIyAxMy4gUXVlbHF1ZXMgcmVjZXR0ZXMgcG91ciBmYWlyZSBkdXJlciBsZSBwbGFpc2lyDQoNCjxkaXYgY2xhc3MgPSAiYm94MiI+DQojIyMjIEV4dHJhaXJlIHNldWxlbWVudCBjZXJ0YWlucyBjYXJhY3TDqHJlcyBzZWxvbiBsZXVyIHBvc2l0aW9uDQo8L2Rpdj4NCjxkaXYgY2xhc3MgPSAiYm94MSI+DQoNCkV4dHJhaXJlIHNldWxlbWVudCBsZXMgY2FyYWN0w6hyZXMgZGUgNSDDoCA3ICANCg0KLSB2YWx1ZVs1LCA3XQ0KDQpFeHRyYWlyZSBsZXMgY2FyYWN0w6hyZXMgw6AgcGFydGlyIGRlIDUgIA0KDQotIHZhbHVlLnN1YnN0cmluZyg1KQ0KPC9kaXY+DQoNCjwvYnI+DQoNCjxkaXYgY2xhc3MgPSAiYm94MiI+DQojIyMjIFNhdm9pciBzaSB1bmUgY29uZGl0aW9uIGVzdCB2cmFpZSBvdSBmYXVzc2U/DQo8L2Rpdj4NCjxkaXYgY2xhc3MgPSAiYm94MSI+DQpFc3QtY2UgcXVlIGxlIGNvbnRlbnUgZGVzIHZhbGV1cnMgY29ycmVzcG9uZCDDoCAiMjAxOS0wMS0wMSIgIA0KDQotIHZhbHVlPT0iMjAxOS0wMS0wMSINCjwvZGl2Pg0KDQo8L2JyPg0KDQo8ZGl2IGNsYXNzID0gImJveDIiPg0KIyMjIyBDb25uYcOudHJlIGxhIGxvbmd1ZXVyIGRlcyB2YWxldXJzIGQndW5lIGNvbG9ubmUNCjwvZGl2Pg0KPGRpdiBjbGFzcyA9ICJib3gxIj4NCi0gdmFsdWUubGVuZ3RoKCkNCjwvZGl2Pg0KDQo8L2JyPg0KDQo8ZGl2IGNsYXNzID0gImJveDIiPg0KIyMjIyBDb21wdGVyIGxlIG5vbWJyZSBkZSBtb3RzIGRhbnMgZGVzIGNlbGx1bGVzIChzw6lwYXLDqXMgcGFyIGRlcyBlc3BhY2VzKQ0KPC9kaXY+DQo8ZGl2IGNsYXNzID0gImJveDEiPg0KLSB2YWx1ZS5zcGxpdCgiICIpLmxlbmd0aCgpIG91IHZhbHVlLnNwbGl0KC9ccy8pLmxlbmd0aCgpDQo8L2Rpdj4NCg0KPC9icj4NCg0KPGRpdiBjbGFzcyA9ICJib3gyIj4NCiMjIyMgQ2FsY3VsIGQndW4gcG91cmNlbnRhZ2UgYXJyb25kaSAoZXggZCd1biByw6lzdWx0YXQgc3VyIDEwKQ0KPC9kaXY+DQo8ZGl2IGNsYXNzID0gImJveDEiPg0KLSByb3VuZCgodmFsdWUqMTAwKSAvIDEwKQ0KPC9kaXY+DQoNCjwvYnI+DQoNCjxkaXYgY2xhc3MgPSAiYm94MiI+DQojIyMjIFRyYW5zZm9ybWVyIHVuIGZvcm1hdCBkYXRlIGVuIGZvcm1hdCB0ZXh0ZSBwbHVzIGxpc2libGUNCjwvZGl2Pg0KPGRpdiBjbGFzcyA9ICJib3gxIj4NCi0gdmFsdWUudG9TdHJpbmcoImRkIE1NTU0geXl5eSIpDQoNCjwvZGl2Pg0KDQo8L2JyPg0KDQoNCjxkaXYgY2xhc3MgPSAiYm94MiI+DQojIyMjIExhIGNyw6lhdGlvbiBldCBtYW5pcHVsYXRpb24gZGUgbGlzdGVzICgqYXJyYXkqKSAtIERpdmlzZXIgbGUgY29udGVudSBkZSBjZWxsdWxlcyANCjwvZGl2Pg0KPGRpdiBjbGFzcyA9ICJib3gxIj4NCkRpdmlzZXIgbGUgY29udGVudSBkZSBjZWxsdWxlcyBlbiBmb25jdGlvbiBkJ3VuIHPDqXBhcmF0ZXVyIHBvdXIgbmUgY29uc2VydmVyIHF1ZSBsZSBwcmVtaWVyIMOpbMOpbWVudCAgICANCg0KLSB2YWx1ZS5zcGxpdCgiICIpWzBdDQoNCkRpdmlzZXIgbGUgY29udGVudSBkJ3VuZSBjZWxsdWxlIHBvdXIgbGUgcsOpb3Jkb25uZXIgDQoNCi0gdmFsdWUuc3BsaXQoIiwiKS5yZXZlcnNlKCkuam9pbigiLCIpDQoNCi0gdmFsdWUuc3BsaXQoIiwiKS5zb3J0KCkuam9pbigiLCIpDQoNCkRpdmlzZXIgYXByw6hzIGxlcyAzIHByZW1pZXJzIGNhcmFjdMOocmVzIGV0IGNvbnNlcnZlciBsZSBwcmVtaWVyIMOpbMOpbWVudCAgDQoNCi0gdmFsdWUuc3BsaXRCeUxlbmd0aHMoMylbMF0gDQoNCkRpdmlzZXIgc2Vsb24gbGUgdHlwZSBkZSBjYXJhY3TDqHJlcyBldCByZXRlbmlyIGxlIGRldXhpw6htZSDDqWzDqW1lbnQgIA0KDQotIHZhbHVlLnNwbGl0QnlDaGFyVHlwZSgpWzFdDQoNCkRpdmlzZXIgbGUgY29udGVudSBkJ3VuZSBjZWxsdWxlIHN1ciB1biB0ZXJtZSB4IGV0IGNvbnNlcnZlciBsZSBjb250ZW51IHByw6ljw6lkZW50IA0KDQotIHZhbHVlLnBhcnRpdGlvbigidGVybWUiKVswXQ0KDQotIHZhbHVlLnBhcnRpdGlvbigiIHRvICIpWzJdLnBhcnRpdGlvbigiIG9uICIpWzBdDQoNCjwvZGl2Pg0KDQo8L2JyPg0KDQo8ZGl2IGNsYXNzID0gImJveDIiPg0KIyMjIyBJbnZlcnNlciBsZSBjb250ZW51IGQndW5lIGNlbGx1bGUNCjwvZGl2Pg0KPGRpdiBjbGFzcyA9ICJib3gxIj4NCkRpdmlzZXIgbGUgY29udGVudSBkJ3VuZSBjZWxsdWxlIGV0IGludmVyc2VyIGwnb3JkcmUgZGUgcHLDqXNlbnRhdGlvbiBlbiBham91dGFudCB1bmUgdmlyZ3VsZSBlbnRyZSBsZXMgZGV1eCAgDQoNCi0gdmFsdWUuc3BsaXQoJyAnKVsxXSArICIsIiArICIgIiArIHZhbHVlLnNwbGl0KCcgJylbMF0NCg0KT1UNCg0KLSB2YWx1ZS5tYXRjaCgvKC4qKSwoLiopLykucmV2ZXJzZSgpLmpvaW4oIiAiKQ0KPC9kaXY+DQoNCg0KPC9icj4NCg0KPGRpdiBjbGFzcyA9ICJib3gyIj4NCiMjIyMgQWpvdXRlciB1biB6w6lybyBwb3VyIGF2b2lyIHVuIG5vbWJyZSBkZSBjYXJhY3TDqHJlcyBwcsOpY2lzDQo8L2Rpdj4NCjxkaXYgY2xhc3MgPSAiYm94MSI+DQpBam91dGVyIHVuIHrDqXJvIGRldmFudCBsZSBjb250ZW51IHNpIGRvbm5lIHVuZSBjaGFpbmUgZGUgMCDDoCAyIGNhcmFjdMOocmVzICANCg0KLSAiMCJbMCwyLWxlbmd0aCh2YWx1ZSldICsgdmFsdWUNCjwvZGl2Pg0KDQo8L2JyPg0KDQo8ZGl2IGNsYXNzID0gImJveDIiPg0KIyMjIyBBcHBsaXF1ZXIgZGVzIGNvbmRpdGlvbnMNCjwvZGl2Pg0KPGRpdiBjbGFzcyA9ICJib3gxIj4NCkZvbmN0aW9uIGlmIC0gbcOqbWUgY2hvc2UgcXVlIGRhbnMgZXhjZWwgIA0KDQotIGlmKHRlc3QsIHNpIHRlc3QgZXN0IHZyYWksIHNpIHRlc3QgZXN0IHZyYWkpDQoNClNpIGxhIGNlbGx1bGUgY29udGllbnQgeCwgw6ljcmlyZSB4LCBzaW5vbiB5DQoNCi0gaWYodmFsdWUuY29udGFpbnMoIngiKSwgIngiLCAieSIpDQogDQotIGlmKHZhbHVlLmNvbnRhaW5zKCIxIiksIHZhbHVlLCBudWxsKQ0KDQo8L2Rpdj4NCg0KPC9icj4NCg0KPGRpdiBjbGFzcyA9ICJib3gyIj4NCiMjIyMgQ29tcGFyZXIgZGV1eCBjb2xvbm5lcw0KPC9kaXY+DQo8ZGl2IGNsYXNzID0gImJveDEiPg0KSWRlbnRpZmllciBzaSBsZSBjb250ZW51IGRlcyBjZWxsdWxlcyBkJ3VuZSBjb2xvbm5lIGVzdCBwYXJlaWwgw6AgdW5lIGF1dHJlICANCg0KLSB2YWx1ZSA9PSBjZWxsc1snYXV0cmUtY29sb25uZSddLnZhbHVlDQoNCkVzdC1jZSBxdWUgbGUgcHJlbWllciBjYXJhY3TDqHJlIGRlIGxhIGNvbG9ubmUgeCBlc3QgbGUgbcOqbWUgcXVlIGxhIGNvbG9ubmUgeSAgDQoNCi0gY2VsbHNbImNvbG9ubmUxIl0udmFsdWVbMF0gPT0gY2VsbHNbImNvbG9ubmUyIl0udmFsdWVbMF0NCg0KQ29tcGFyZXIgbGUgY29udGVudSBkZSBkZXV4IGNvbG9ubmVzIGV0IG1vZGlmaWVyIGxlcyB2YWxldXJzIHNlbG9uIGxlIHLDqXN1bHRhdCBkZSBsYSBjb25kaXRpb24gIA0KDQotIGlmKGNlbGxzWyJjb2xvbm5lMSJdLnZhbHVlID09IGNlbGxzWyJjb2xvbm5lMiJdLnZhbHVlLCAiUGFyZWlsIiwgIlBhcyBwYXJlaWwiKQ0KPC9kaXY+DQoNCjwvYnI+DQoNCjxkaXYgY2xhc3MgPSAiYm94MiI+DQojIyMjIFbDqXJpZmllciBsZSBmb3JtYXQgZCd1bmUgY29sb25uZQ0KPC9kaXY+DQo8ZGl2IGNsYXNzID0gImJveDEiPg0KDQotIHZhbHVlLnR5cGUoKSAgDQoNCjwvZGl2Pg0KDQo8L2JyPg0KDQoNCg0KPGRpdiBjbGFzcyA9ICJib3gyIj4NCiMjIyMgRmFpcmUgZGVzIGNhbGN1bHMgc2ltcGxlcyAodmFsZXVycyBudW3DqXJpcXVlcykNCjwvZGl2Pg0KPGRpdiBjbGFzcyA9ICJib3gxIj4NCg0KU29tbWUgZCd1bmUgY29sb25uZSBwbHVzIHVuZSBhdXRyZSAgDQoNCi0gdmFsdWUgKyBjZWxsc1snSm91ciBkdSBtb2lzJ10udmFsdWUNCg0KQXJyb25kaXIgbGUgY29udGVudSAgDQoNCi0gcm91bmQodmFsdWUpDQo8L2Rpdj4NCg0KDQo8L2JyPg0KDQo8ZGl2IGNsYXNzID0gImJveDIiPg0KIyMjIyBSZXByZW5kcmUgZXQgY29uY2F0w6luZXIgbGUgY29udGVudSBkJ3VuZSBhdXRyZSBjb2xvbm5lDQo8L2Rpdj4NCjxkaXYgY2xhc3MgPSAiYm94MSI+DQpDcsOpZXIgdW5lIG5vdXZlbGxlIGNvbG9ubmUgZW4gZnVzaW9ubmFudCBsZSBjb250ZW51IGRlIGRldXggYXV0cmVzIGV0IGFqb3V0ZXIgZHUgdGV4dGUgIA0KDQotIGNlbGxzWydub20nXS52YWx1ZSArIGNlbGxzWydub20nXS52YWx1ZSArICJCb25qb3VyISINCg0KQ3LDqWVyIHVuZSBub3V2ZWxsZSBjb2xvbm5lIGF2ZWMgbGVzIHRyb2lzIHByZW1pZXJzIGNhcmFjdMOocmVzIHNldWxlbWVudCAgDQoNCi0gY2VsbHNbJ1N5bXB0b21lJ10udmFsdWVbMCwzXQ0KDQpUcmFuc2Zvcm1lciBsZSBjb250ZW51IGQndW5lIGNvbG9ubmUgZW4gY29uY2F0w6luYW50IGxlIGNvbnRlbnUgZCd1bmUgYXV0cmUgIA0KDQotIHZhbHVlICsgJyAnICsgY2VsbHNbJ3N0cmVldC10eXBlJ10udmFsdWUNCjwvZGl2Pg0KDQo8L2JyPg0KDQo8ZGl2IGNsYXNzID0gImJveDIiPg0KIyMjIyBSZW1wbGFjZXIgZGVzIGNhcmFjdMOocmVzDQo8L2Rpdj4NCjxkaXYgY2xhc3MgPSAiYm94MSI+DQoNClJlbXBsYWNlciB0b3V0IGxlIGNvbnRlbnUgZCd1bmUgY29sb25uZSAoaWNpLCB2aWRlciBsYSBjb2xvbm5lKSAgDQoNCi0gdmFsdWUucmVwbGFjZSh2YWx1ZSwgIiIpDQoNClJlbXBsYWNlciB1bmUgbGV0dHJlIHBhciB1bmUgYXV0cmUgIA0KDQotIHZhbHVlLnJlcGxhY2VDaGFycygibyIsICJhIikNCg0KRmFpcmUgcGx1c2lldXJzIHJlbXBsYWNlbWVudHMgZCd1biBjb3VwICANCg0KLSB2YWx1ZS5yZXBsYWNlKCIxIiwgInVuIikucmVwbGFjZSgiMiIsICJkZXV4IikucmVwbGFjZSgiMyIsICJ0cm9pcyIpDQo8L2Rpdj4NCg0KPC9icj4NCg0KPGRpdiBjbGFzcyA9ICJib3gyIj4NCiMjIyMgSWRlbnRpZmllciBkZXMgY2VsbHVsZXMgcXVpIGNvbW1lbmNlbnQgcGFyLi4uIChyw6lzdWx0YXQgYm9vbMOpZW4pDQo8L2Rpdj4NCjxkaXYgY2xhc3MgPSAiYm94MSI+DQoNCi0gdmFsdWUuc3RhcnRzV2l0aCgiQmVycmkiKSAgDQoNCjwvZGl2Pg0KDQo8L2JyPg0KDQo8ZGl2IGNsYXNzID0gImJveDIiPg0KIyMjIyBTdXBwcmltZXIgdW4gY2FyYWN0w6hyZSBkZSBkw6lidXQgb3UgZmluIGRlIHZhbGV1cjoNCjwvZGl2Pg0KPGRpdiBjbGFzcyA9ICJib3gxIj4NCg0KU3VwcHJpbWUg4oCcU+KAnSBkdSBkw6lidXQgZGUgbGEgY2VsbHVsZSAgDQoNCi0gdmFsdWUucmVwbGFjZSgvXlMvLCIiKSBbcmVnZXggXiBpbmRpcXVlIGxlIGTDqWJ1dCBkJ3VuZSBjZWxsdWxlXQ0KDQpTdXBwcmltZSAiLiIgw6AgbGEgZmluIGRlIGxhIGNlbGx1bGUgIA0KDQotIHZhbHVlLnJlcGxhY2UoL1wuJC8sIiIpIFtyZWdleCAkIGluZGlxdWUgbGEgZmluIGQndW5lIGNlbGx1bGVdDQo8L2Rpdj4NCg0KPC9icj4NCg0KPGRpdiBjbGFzcyA9ICJib3gxIj4NCg0KTW9kaWZpZXIvc3VwcHJpbWVyIGxhIHBvbmN0dWF0aW9uDQoNCi0gdmFsdWUucmVwbGFjZSgvXHB7UHVuY3R9LywnICcpDQoNCjwvZGl2Pg0KDQo8L2JyPg0KDQo8ZGl2IGNsYXNzID0gImJveDIiPg0KIyMjIyBUcmF2YWlsbGVyIGF2ZWMgdW4gZm9ybWF0IGRhdGUNCjwvZGl2Pg0KPGRpdiBjbGFzcyA9ICJib3gxIj4NCkV4dHJhaXJlIHNldWxlbWVudCB1bmUgcGFydGllIGQndW5lIGRhdGUgIA0KDQotIHZhbHVlLnRvRGF0ZSgpLmRhdGVQYXJ0KCJ5ZWFyIikgIA0KDQotICBkaWZmKG5vdygpLHZhbHVlLCd3ZWVrcycpICANCg0KPC9kaXY+DQoNCg0KKioqDQoNCg0KIyAxNC4gUmVzc291cmNlcw0KDQotIFtTaXRlIGV0IGRvY3VtZW50YXRpb24gb2ZmaWNpZWxzXShodHRwczovL29wZW5yZWZpbmUub3JnLykNCg0KLSBKb2huIExpdHRsZSwgMjAxOCwgW0NsZWFuaW5nIERhdGEgd2l0aCBPcGVuUmVmaW5lXShodHRwczovL2xpYmpvaG4uZ2l0aHViLmlvL29wZW5yZWZpbmUvaW5kZXguaHRtbCkgIA0KDQotIEV2YW4gV2lsbCwgMjAyMSwgW0dldCBTdGFydGVkIHdpdGggT3BlblJlZmluZTogRXhwbG9yZSwgQ2xlYW4sIGFuZCBUcmFuc2Zvcm0geW91ciBEYXRhIV0oaHR0cHM6Ly9ldmFud2lsbC5naXRodWIuaW8vb3BlbnJlZmluZS1iLykgIA0KDQotIFVDTEEsIDIwMTksIFtHZXR0aW5nIHN0YXJ0ZWQgd2l0aCBPcGVuUmVmaW5lIERpZ2l0YWwgSHVtYW5pdGllcyAyMDFdKGh0dHA6Ly9taXJpYW1wb3NuZXIuY29tL2NsYXNzZXMvZGgyMDF3MTkvdHV0b3JpYWxzLWd1aWRlcy9kYXRhLWNsZWFuaW5nLWFuZC1tYW5pcHVsYXRpb24vZ2V0dGluZy1zdGFydGVkLXdpdGgtb3BlbnJlZmluZS8pDQoNCi0gW1JlZmluZVBybyBLbm93bGVkZ2UgQmFzZSBmb3IgT3BlblJlZmluZV0oaHR0cHM6Ly9rYi5yZWZpbmVwcm8uY29tLykNCg0KLSBTZXRoIHZhbiBIb29sYW5kLCBSdWJlbiBWZXJib3JnaCwgYW5kIE1heCBEZSBXaWxkZSwgW0NsZWFuaW5nIERhdGEgd2l0aCBPcGVuUmVmaW5lXShodHRwczovL3Byb2dyYW1taW5naGlzdG9yaWFuLm9yZy9lbi9sZXNzb25zL2NsZWFuaW5nLWRhdGEtd2l0aC1vcGVucmVmaW5lKQ0KDQotIFtJbnRyb2R1Y3Rpb24gdG8gT3BlblJlZmluZV0oaHR0cHM6Ly9kb2FuYS5naXRib29rcy5pby90ZXN0L2NvbnRlbnQvKQ0KDQotIERhdGEgQ2FycGVudHJ5LCBbRGF0YSBDbGVhbmluZyB3aXRoIE9wZW5SZWZpbmUgZm9yIEVjb2xvZ2lzdHNdKGh0dHBzOi8vZGF0YWNhcnBlbnRyeS5vcmcvT3BlblJlZmluZS1lY29sb2d5LWxlc3Nvbi8wMC1nZXR0aW5nLXN0YXJ0ZWQvaW5kZXguaHRtbCkNCg0KLSBPd2VuIFN0ZXBoZW5zLCAyMDE0LCBbSW50cm9kdWN0aW9uIHRvIE9wZW5SZWZpbmVdKGh0dHA6Ly93d3cubWVhbmJveWZyaWVuZC5jb20vb3ZlcmR1ZV9pZGVhcy93cC1jb250ZW50L3VwbG9hZHMvMjAxNC8xMS9JbnRyb2R1Y3Rpb24tdG8tT3BlblJlZmluZS1oYW5kb3V0LUNDLUJZLnBkZikNCg0KLSBWZXJib3JnaCBldCBEZSBXaWxkZSwgMjAxMywgW1VzaW5nIE9wZW5SZWZpbmVdKGh0dHBzOi8vd3d3LmdiaWYuZXMvd3AtY29udGVudC91cGxvYWRzLzIwMTgvMDEvVXNpbmctT3BlblJlZmluZUJvb2sucGRmKQ0KDQotIFtMaWJyYXJ5IENhcnBlbnRyeTogT3BlblJlZmluZV0oaHR0cHM6Ly9saWJyYXJ5Y2FycGVudHJ5Lm9yZy9sYy1vcGVuLXJlZmluZS8wMS1pbnRyb2R1Y3Rpb24vaW5kZXguaHRtbCkNCg0KLSBbR3JhdGVmdWwgRGF0YV0oaHR0cHM6Ly9naXRodWIuY29tL3Njb3R0eXRoZXJlZC9ncmF0ZWZ1bGRhdGEvd2lraSkgIA0KDQotIFtEYXZpZCBIdXluaCwgR29vZ2xlIFJlZmluZV0oaHR0cDovL3d3dy5kYXZpZGh1eW5oLm5ldC9zcGFjZXMvbmljYXIyMDExL3R1dG9yaWFsLnBkZikNCg0KLSBbT3BlbiBSZWZpbmUgRk9yIExpYnJhcmlhbnNdKGh0dHA6Ly9saXdvbmcuYmxvZ3Nwb3QuY29tLykNCg0KLSBbQ2hlYXQgU2hlZXQ6IFJlZ3VsYXIgRXhwcmVzc2lvbnMgJiBHUkVMXShodHRwczovL2NvZGU0bGlidG9yb250by5naXRodWIuaW8vMjAxOC0xMC0xMi1hY2Nlc3MvR29vZ2xlUmVmaW5lQ2hlYXRTaGVldHMucGRmKQ0KDQotICpSZWNpcGVzKjogW09wZW4gUmVmaW5lIGZvciBMaWJyYXJpYW5zXShodHRwOi8vbGl3b25nLmJsb2dzcG90LmNvbS9zZWFyY2gvbGFiZWwvcmVjaXBlKQ0KDQotIFtHUkVMIFJlY2lwZXNdKGh0dHBzOi8vZ2l0aHViLmNvbS9PcGVuUmVmaW5lL09wZW5SZWZpbmUvd2lraS9SZWNpcGVzKQ0KDQotIFtFdGMhXShodHRwczovL2dpdGh1Yi5jb20vT3BlblJlZmluZS9PcGVuUmVmaW5lL3dpa2kvRXh0ZXJuYWwtUmVzb3VyY2VzKQ0KDQoNCjxzdHlsZT4NCi5yaWdodCB7DQogZmxvYXQ6IHJpZ2h0Ow0KfQ0KDQouY2VudGVyIHsNCiBhbGlnbjogY2VudGVyOw0KfQ0KDQoubm90ZSB7DQogIHBhZGRpbmc6IDAuNWVtOw0KICBib3JkZXItc3R5bGU6IHNvbGlkOw0KICBib3JkZXItY29sb3I6IGdyZWVuOw0KICBib3JkZXItd2lkdGg6IHRoaW47DQogIGZvbnQtc2l6ZTogOTAlOw0KICBib3JkZXItcmFkaXVzOiAxMHB4Ow0KfQ0KDQouYm94MSB7DQogIHBhZGRpbmc6IDAuNWVtOw0KICBiYWNrZ3JvdW5kOiAjZTBlYmViOw0KICBjb2xvcjogYmxhY2s7DQogIGJvcmRlci1yYWRpdXM6IDEwcHg7DQp9DQoNCi5ib3gyIHsNCiAgcGFkZGluZzogMC41ZW07DQogIGJhY2tncm91bmQ6ICM5MmI5Yjk7DQogIGNvbG9yOiB3aGl0ZTsNCiAgYm9yZGVyLXJhZGl1czogMTBweDsNCn0NCi5jZW50ZXIgew0KICB0ZXh0LWFsaWduOiBjZW50ZXI7DQp9DQoNCi50aXRsZSB7DQogIHRleHQtYWxpZ246IGNlbnRlcjsNCiAgY29sb3I6ICMwMDMzNjY7DQp9DQoNCi5zdWJ0aXRsZSB7DQogIGNvbG9yOiAjMDAzMzY2Ow0KfQ0KDQpoMSwgaDIsIGgzLCBoNCwgaDUsIGg2LCBsZWdlbmQgew0KICBjb2xvcjogIzVBN0I5QzsNCn0NCg0KPC9zdHlsZT4=